类似于"SELECT * FROM table WHERE a1 = @a1 AND a2 = @a2"在OleDbCommand中似乎不管用了,OleDbCommand.Parameters.Add()函数无法根据命名参数来判断究竟哪个参数该赋什么值,只能按照定义的先后顺序对SQL语句中的参数依次赋值,这点与SqlDbCommand不同,具体解释见后。
在OleDbCommand 和OdbcCommand中使用参数
在OleDbCommand或者OdbcCommand中使用参数时,参数添加到Parameters集合中的顺序必须和存储过程中参数定义的顺序匹配。OLE DB和ODBC的.NET Framework数据供应程序将存储过程的参数视为占位符,按照顺序来给参数赋值。另外,返回参数必须是第一个被加入到Parameters集合中的参数。
OLE DB和ODBC的.NET Framework数据供应程序不提供使用命名参数来向SQL语句或存储过程传递参数。为此,你必须使用问号(?)占位符,就像下面一样:
SELECT * FROM Customers WHERE CustomerID = ?
因此,向 Parameters 集合添加 Parameter 对象的顺序必须直接对应于该参数的问号占位符的位置。
看来使用OLE DB和ODBC就只能乖乖按顺序赋值了!!!