2009-10-08 9 views
7

Proszę mi pomóc, nie wiem co może być nie tak z następującego kodu:ASP.NET ODBC zapytań z parametrami

 OdbcConnection conn = new OdbcConnection(connString); 
     String query = "INSERT INTO customer (custId, custName, custPass, "+ 
         "custEmail, custAddress, custAge) VALUES (" + 
         "@ID, @Name, @Pass, @Email, @Address, @Age)"; 

     OdbcCommand exe = new OdbcCommand(query, conn); 
     exe.Parameters.Add("@ID", OdbcType.UniqueIdentifier).Value = id; 
     exe.Parameters.Add("@Name", OdbcType.VarChar).Value = name; 
     exe.Parameters.Add("@Pass", OdbcType.VarChar).Value = pass; 
     exe.Parameters.Add("@Email", OdbcType.VarChar).Value = email; 
     exe.Parameters.Add("@Address", OdbcType.VarChar).Value = address; 
     exe.Parameters.Add("@Age", OdbcType.Int).Value = age; 
     conn.Open(); 
     exe.ExecuteNonQuery(); // ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 6. 

Ten kod rzuca mi Too few parameters. błąd, gdy próbuję wykonać kwerendy. Baza danych jest w porządku, działa dobrze, gdy koduję wartości w zapytaniu, zamiast używać parametrów.

Dziękuję.

+1

spróbuj zmienić podaje do hasło zakaz może to jest uzyskiwanie mylić z identyfikatorem asp ... – halocursed

Odpowiedz

31

Od MSDN:

Kiedy CommandType jest ustawiony na tekst, dostawca danych .NET Framework dla ODBC robi nie obsługuje przekazywania nazwanych parametrów do instrukcji SQL lub do procedury składowanej wywoływanej przez OdbcCommand. W każdym z tych przypadków użyj znaku zastępczego (?) Ze znakiem zapytania. Na przykład:

SELECT * FROM Customers WHERE CustomerID = ? 

Przepisz zapytanie do

OdbcConnection conn = new OdbcConnection(connString); 
    String query = "INSERT INTO customer (custId, custName, custPass, "+ 
        "custEmail, custAddress, custAge) VALUES (" + 
        "?, ?, ?, ?, ?, ?)"; 

zamówienia liczy parametrów!

EDIT: Parametr może być dodany w ten sposób:

OdbcCommand exe = new OdbcCommand(query, conn); 
exe.Parameters.Add("ID", OdbcType.UniqueIdentifier).Value = id; 
exe.Parameters.Add("Name", OdbcType.VarChar).Value = name; 
exe.Parameters.Add("Pass", OdbcType.VarChar).Value = pass; 
exe.Parameters.Add("Email", OdbcType.VarChar).Value = email; 
exe.Parameters.Add("Address", OdbcType.VarChar).Value = address; 
exe.Parameters.Add("Age", OdbcType.Int).Value = age; 
+1

dziękuję bardzo, pomogło =) –

+1

Używanie ODBC do FilMaker, ta składnia działa doskonale w środowisku .NET, i kolejność TAK parametrów! –

+0

Jeśli parametry zapytania nie są nazwane, do czego służy pierwszy parametr w 'Parameters.Add()' serve? –

0

Jedna z kolumn w zapytaniu nie istnieje.
Sprawdź nazwy kolumn.

0

Zazwyczaj zobaczysz to, gdy źle wypiszesz nazwę kolumny w instrukcji SQL. Czy jesteś pewien tych nazw kolumn (custId, custName itp.)?

+0

jestem całkiem pewny, bo jeśli zmienię mój trzeci linię zapytanie do rzeczywistych wartości działa poprawnie. –

0

spróbuj zmienić podaje do hasło zakaz może to jest uzyskiwanie mylić z identyfikatorem asp ...

+0

nie pomaga, widzę ten sam komunikat o błędzie (( –