2013-08-06 10 views
12

Potrzebuję do wiązania parametrów kwerendy ODBC z C#. To jest przykładowy kod, ale VS mówi mi, że brakuje jednego parametru.Jak powiązać parametry za pomocą ODBC C#?

Jaka jest składnia wartości wiązania w ODBC?

+0

Jaki jest dokładny komunikat o błędzie? – Steve

+0

BŁĄD [07002] [Microsoft] [Sterownik ODBC Microsoft Access] Parametri niewystarczający. Previsto 1. Ten błąd oznacza, że ​​brakuje jednego parametru. – pava91

+0

ODBC nie obsługuje nazwanych parametrów; http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx używa porządkowych "?" symboli zastępczych - jeśli używasz programu Access, istnieje powód używania ODBC zamiast OLEDB (który pozwoli im)? –

Odpowiedz

26

ODBC nie można używać nazwanych parametrów. Oznacza to, że ciąg poleceń używa symboli zastępczych dla każdego parametru, a ten symbol zastępczy jest pojedynczym znakiem zapytania, a nie nazwą parametru.

OdbcCommand.Parameters

Następnie trzeba dodać parametry w kolekcji w takiej samej kolejności, w jakiej występują w łańcuchu dowodzenia

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

Trzeba też inny problem, słowo użytkownika jest zarezerwowana słowo kluczowe dla MS Access Database i jeśli chcesz użyć tego jako nazwy pola lub nazwy tabeli, wymagane jest zawarcie każdego odniesienia za pomocą nawiasów kwadratowych. Sugeruję, jeśli to możliwe, zmienić nazwę tego stołu, ponieważ bardzo często będzie to dotyczyć tego problemu.

+0

To prawda! dzięki – pava91

+0

@ pava91: zaznacz to jako poprawną odpowiedź, a następnie ... – MiMo

6

użyj "?" zamiast @, jeśli używasz ODBC.

Spróbuj zrobić w następujący sposób:

OdbcCommand cmd = conn.CreateCommand(); 

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

Spędzam jedną godzinę, próbując to rozgryźć, dzięki, kolego !!!! –