1

我正在使用 OleDb 填充数据表。我正在尝试使用参数化查询,但它似乎不适用于 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
4

3 回答 3

5

请参阅http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx

“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 而不是命名参数的位置参数。”

所以你不能使用@Parameter语法,你必须用问号表示参数,并按照它们在查询中出现的完全相同的顺序分配你的参数值。

于 2011-11-14T15:46:39.637 回答
0

对于那些在查询甚至没有参数时寻求帮助的人,请检查您的列名是否有效。

请参阅 OleDbException 处的 @TheTerribleProgrammers 回答: 未定义参数时未为参数提供值

于 2018-08-27T16:30:37.247 回答
-1
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;
    }
于 2012-09-18T07:37:19.110 回答