Использование параметров с OleDbDataAdapter в C # - PullRequest
1 голос
/ 14 ноября 2011

Я использую OleDb для заполнения DataTable. Я пытаюсь использовать параметризованный запрос, но он не работает с OleDbDataAdapter. У кого-нибудь есть предложения?

cmd.CommandText = "SELECT A,B,C,D FROM someTable WHERE A=@A AND D BETWEEN @D1 AND @D2";
cmd.Parameters.Add("@A", OleDbType.VarChar).Value = "1234567";
cmd.Parameters.Add("@D1", OleDbType.DBDate).Value = "02/01/2011";
cmd.Parameters.Add("@D2", OleDbType.DBDate).Value = "01/31/2012";

A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll
System.Data.OleDb.OleDbException (0x80040E11): [DB2] SQL0206N  "@A" is not valid in the context where it is used.  SQLSTATE=42703

Ответы [ 3 ]

5 голосов
/ 14 ноября 2011

См. http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx:

"Поставщик данных OLE DB.NET Framework использует позиционные параметры, помеченные знаком вопроса (?) Вместо именованных параметров."

Таким образом, вы не можете использовать синтаксис @Parameter, вам необходимо указать параметры с вопросительными знаками и назначить значения параметров в той же последовательности, в какой они появляются в запросе.

0 голосов
/ 27 августа 2018

Для тех, кто ищет помощь, когда в их запросе даже нет параметра, проверьте правильность имен столбцов.

см. Ответ @TheTerribleProgrammers на OleDbException: значение для параметров не задано, еслипараметры определены

0 голосов
/ 18 сентября 2012
public static DataTable getDataGridList(string strCmd)
    {

        openConnection(conn);
        OleDbDataAdapter DADet = new OleDbDataAdapter(strCmd, conn);
        DataTable DTDet = new DataTable();
        DADet.Fill(DTDet);
        closeConnection(conn, null);
        return DTDet;
    }
...