2009-10-08 2 views
7

Bitte mir helfen, ich weiß nicht, was mit dem folgenden Code falsch sein kann:ASP.NET ODBC-Abfrage mit Parametern

 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. 

Dieser Code wirft mir Too few parameters. Fehler, wenn ich Abfrage auszuführen versuchen. Die Datenbank ist in Ordnung, es funktioniert gut, wenn ich Werte in eine Abfrage festlege, anstatt Parameter zu verwenden.

Vielen Dank.

+1

versuchen Pass Wechsel vielleicht passw es mit asp Kennung gemischt wird immer ... – halocursed

Antwort

31

Von MSDN:

Wenn Commandtype auf Text eingestellt ist, der .NET Framework-Datenanbieter für ODBC tut unterstützt nicht die Übergabe benannter Parameter an eine SQL-Anweisung oder an eine gespeicherte Prozedur, die von einem OdbcCommand aufgerufen wird. Verwenden Sie in beiden Fällen den Fragezeichen (?) Platzhalter. Zum Beispiel:

SELECT * FROM Customers WHERE CustomerID = ? 

Rewrite Ihre Anfrage an

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

Reihenfolge der Parameter zählt!

EDIT: Parameter können auf diese Weise hinzugefügt werden:

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

vielen Dank, es half =) –

+1

Mit ODBC zu FilMaker, funktionierte diese Syntax perfekt in .NET-Umgebung, und die Reihenfolge der YES Reihenfolge der Parameter! –

+0

Wenn die Abfrageparameter werden nicht benannt, welchen Zweck erfüllt der erste Parameter in 'Parameters.Add()'? –

0

Eine Ihrer Spalten in Ihrer Abfrage existiert nicht.
Bitte überprüfen Sie Ihre Spaltennamen.

0

Normalerweise sehen Sie dies, wenn Sie einen Spaltennamen in Ihrer SQL-Anweisung falsch schreiben. Sind Ihnen diese Spaltennamen sicher (custId, custName usw.)?

+0

ich bin ziemlich sicher, denn wenn ich meine dritte Zeile ändern Abfrage nach tatsächlichen Werten funktioniert es gut. –

0

versucht Pass Wechsel vielleicht passw es mit asp Kennung gemischt wird immer ...

+0

hilft nicht, ich sehe die gleiche Fehlermeldung (( –