本文主要是介绍莫名其妙的SqlServer更新错误:OleDbException 必须声明标量变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以前一直使用OleDbDataAdapter的方式更新数据库,今天我试了一下用OleDbCommand的方式更新数据库出现了莫名其妙的错误。
环境:Sql Server 2005
使用如下代码:
string strSql = " UPDATE M_Employee set EMPLOYEENAME = @EMPLOYEENAME where EMPLOYEEID = @EMPLOYEEID " ;
using (OleDbCommand Comm = new OleDbCommand(strSql, olecn))
{
Comm.Parameters.Add(new OleDbParameter("@EMPLOYEENAME", OleDbType.VarChar)).Value = "ddd";
Comm.Parameters.Add(new OleDbParameter("@EMPLOYEEID", OleDbType.VarChar)).Value = EmployeeID;
Comm.ExecuteNonQuery();
}
一直报错:必须声明标量变量@EMPLOYEENAME
using (OleDbCommand Comm = new OleDbCommand(strSql, olecn))
{
Comm.Parameters.Add(new OleDbParameter("@EMPLOYEENAME", OleDbType.VarChar)).Value = "ddd";
Comm.Parameters.Add(new OleDbParameter("@EMPLOYEEID", OleDbType.VarChar)).Value = EmployeeID;
Comm.ExecuteNonQuery();
}
害我调试了n个小时,不行。
换了下面的方式就可以了
string strSql = " UPDATE M_Employee set EMPLOYEENAME = ? where EMPLOYEEID = ? " ;
using (OleDbCommand Comm = new OleDbCommand(strSql, olecn))
{
Comm.Parameters.Add(new OleDbParameter("@P1", OleDbType.VarChar)).Value = "ddd";
Comm.Parameters.Add(new OleDbParameter("@P2", OleDbType.VarChar)).Value = EmployeeID;
Comm.ExecuteNonQuery();
}
解释:
using (OleDbCommand Comm = new OleDbCommand(strSql, olecn))
{
Comm.Parameters.Add(new OleDbParameter("@P1", OleDbType.VarChar)).Value = "ddd";
Comm.Parameters.Add(new OleDbParameter("@P2", OleDbType.VarChar)).Value = EmployeeID;
Comm.ExecuteNonQuery();
}
解释:
使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序。OLEDB、SqlClient 和 Oracle 提供程序全部使用不同的语法。例如,用于命名和指定参数的 SQL 语法使用 @ 符号,OLEDB 参数语法需要使用问号 (?) 作为参数占位符,而 Oracle 提供程序使用冒号 (:)。
如果希望创建的解决方案不需要创建自定义代码块来适应提供程序特定的 SQL 语法,即可适用于不同的提供程序,您将需要使用基本的 ANSI SQL 语法,并避免使用参数以及提供程序特定的语言功能。可以创建一个 DbCommand 对象,并使用字符串串联动态构造将适用于多个提供程序的有效 SQL 语句。您还将需要解决的问题是:不同的提供程序支持的日期/时间数据类型的数据类型分隔符也不同。以下代码段说明如何串联从 SELECT 语句的变量检索到的 WHERE 子句的值。
如果希望创建的解决方案不需要创建自定义代码块来适应提供程序特定的 SQL 语法,即可适用于不同的提供程序,您将需要使用基本的 ANSI SQL 语法,并避免使用参数以及提供程序特定的语言功能。可以创建一个 DbCommand 对象,并使用字符串串联动态构造将适用于多个提供程序的有效 SQL 语句。您还将需要解决的问题是:不同的提供程序支持的日期/时间数据类型的数据类型分隔符也不同。以下代码段说明如何串联从 SELECT 语句的变量检索到的 WHERE 子句的值。
http://www.cnblogs.com/firstyi/archive/2007/08/10/851097.html
这篇关于莫名其妙的SqlServer更新错误:OleDbException 必须声明标量变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!