OleCommand的SqlText占位符的问题
http://blog.sina.com.cn/s/blog_54b576bb0100anku.html
在使用access数据时,经常使用
string strSql="insert table_name(col1,col2,...,coln) values(@col1,@col2,...,@coln)";
来向数据库插入数据,写法居然是有毛病的,参照msdn,应该改为
string strSql="insert table_name(col1,col2,...,coln) values(?,?,...,?)";
来自msdn的解释:
如果 CommandType 设置为 Text,OLE DB.NET 提供程序不支持将参数传递给 OleDbCommand 调用的 SQL 语句或存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
因此,OleDbParameterCollection
NET中SQL的Parameter占位符的使用
在一般的情况想在
- OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持用于将参数传递到 SQL 语句或存储过程的命名参数。在此情况下,必须使用问号 (?) 占位符,顺序必须与存储过程中所定义的参数顺序相匹配,如以下示例所示。SELECT * FROM Customers WHERE CustomerID = ?;在Access中你可以使用@CustomerId也可以使用“?”但是在DB2中你只能使用“?”,使用前者会出现错误提示。
一般的规则如下:
- SqlCommand should be '@' character
- OleDbCommand or OdbcCommand should be '?' character
- OracleCommand should be ':' character