我正在使用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
答案 0 :(得分:4)
请参阅http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx:
“OLE DB.NET Framework数据提供程序使用标有问号(?)而不是命名参数的位置参数。”
因此,您无法使用@Parameter
语法,您必须使用问号指示参数,并以与查询中显示的完全相同的顺序分配参数值。
答案 1 :(得分:0)
对于那些在查询甚至没有参数的情况下寻求帮助的人,请检查您的列名是否有效。
请参见@TheTerribleProgrammers的答案,{@ {3}}
答案 2 :(得分:-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;
}