2013-08-06 4 views
12

Ich muss Parameter auf ODBC-Abfrage von C# binden. Dies ist der Beispielcode, aber VS sagt mir, dass ein Parameter fehlt.Wie binden Parameter über ODBC C#?

OdbcCommand cmd = conn.CreateCommand(); 

cmd.CommandText = "SELECT * FROM user WHERE id = @id"; 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4; 
OdbcDataReader reader = cmd.ExecuteReader(); 

Wie lautet die Syntax zum Binden von Werten in ODBC?

+0

Was ist die genaue Fehlermeldung? – Steve

+0

Fehler [07002] [Microsoft] [Treiber ODBC Microsoft Access] Parameter nicht ausreichend. Previsto 1. Dieser Fehler besagt, dass ein Parameter fehlt. – pava91

+0

ODBC unterstützt keine benannten Parameter; http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx es ordinal '' 'Platzhalter verwendet - wenn Sie Access verwenden, gibt es einen Grund für die Verwendung von ODBC anstelle von OLEDB (was wird ihnen erlauben)? –

Antwort

26

Odbc können nicht benannte Parameter verwenden. Dies bedeutet, dass die Befehlszeichenfolge für jeden Parameter Platzhalter verwendet und dieser Platzhalter ein einzelnes Fragezeichen und nicht der Parametername ist.

OdbcCommand.Parameters

Dann müssen Sie die Parameter in der Sammlung in der gleichen Reihenfolge hinzuzufügen, in der sie in der Befehlsfolge erscheint

OdbcCommand cmd = conn.CreateCommand(); 
cmd.CommandText = "SELECT * FROM [user] WHERE id = ?"; 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4; 
OdbcDataReader reader = cmd.ExecuteReader(); 

Sie haben auch ein anderes Problem ist das USER Wort eines reservierten Schlüsselwort pro MS Access-Datenbank und wenn Sie das als Feldname oder Tabellenname verwenden möchten, müssen Sie jede Referenz mit eckigen Klammern versehen. Ich schlage vor, wenn es möglich ist, diesen Tabellennamen zu ändern, weil Sie dieses Problem sehr oft treffen werden.

+0

das ist richtig! Danke – pava91

+0

@ pava91: Markieren Sie dies als die richtige Antwort dann ... – MiMo

6

Verwenden Sie "?" anstelle von @, wenn Sie ODBC verwenden.

Versuchen Sie wie folgt vor:

OdbcCommand cmd = conn.CreateCommand(); 

cmd.CommandText = "SELECT * FROM user WHERE id = ?"; 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4; 
OdbcDataReader reader = cmd.ExecuteReader(); 
+1

Ich verbringe eine ganze Stunde damit, das herauszufinden, danke Kumpel !!!! –