ASP.NET ODBC Query с параметрами - PullRequest
7 голосов
/ 08 октября 2009

Пожалуйста, помогите мне, я не знаю, что может быть не так со следующим кодом:

        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. 

Этот код выдает ошибку Too few parameters., когда я пытаюсь выполнить запрос. С базой данных все в порядке, она отлично работает, когда я жестко кодирую значения в запросе вместо использования параметров.

Спасибо.

Ответы [ 4 ]

31 голосов
/ 08 октября 2009

Из MSDN:

Когда для CommandType установлено значение Text, поставщик данных .NET Framework для ODBC не поддерживает передачу именованных параметров в оператор SQL или хранимую процедуру, вызываемую OdbcCommand. В любом из этих случаев используйте заполнитель с вопросительным знаком (?). Например:

SELECT * FROM Customers WHERE CustomerID = ?

Перепишите ваш запрос на

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

Порядок подсчета параметров!

РЕДАКТИРОВАТЬ: параметр может быть добавлен следующим образом:

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;
0 голосов
/ 08 октября 2009

Как правило, вы увидите это, когда неправильно введете имя столбца в своем выражении SQL. Вы уверены в названиях этих столбцов (custId, custName и т. Д.)?

0 голосов
/ 08 октября 2009

попробуйте изменить pass на passw, возможно, он перепутан с идентификатором asp ...

0 голосов
/ 08 октября 2009

Один из ваших столбцов в запросе не существует.
Пожалуйста, проверьте названия столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...