参数化SQL UPDATE命令会导致“声明标量变量错误”

本文关键字:声明 标量 变量 错误 SQL UPDATE 命令 参数 | 更新日期: 2023-09-27 18:00:25

我正在尝试运行一个UPDATE查询,该查询从用户输入中获取新值。作为一个谨慎的练习,我选择使用参数化,但WHERE子句中的参数会生成一个错误,声明Must Declare the scalar variable '@WF_IDUPDATE'。根据这篇MSDN文章,构造函数SqlParameter(String, Object)应该创建一个由字符串标识的新参数,并接受作为Object传入的值。

供您参考的正在更新的表的模式是:

ID int NOT NULL
Approved BIT NOT NULL
FirstName NVARCHAR(255) NOT NULL
LastName NVARCHAR(255) NOT NULL
Title NVARCHAR(255) NULL
DepartmentID int NOT NULL
Department NVARCHAR(255) NOT NULL
TimeStamp DATETIME NULL
PRIMARY KEY(ID)

以下是有关SQL查询的所有代码

conn.Open();    
SQL_Command.CommandText += "UPDATE WFMembers_Staging SET" +

    "[Approved] = @Approved, " +
                "[FirstName] = @First, " +
                "[LastName] = @Last, " +
                "[Title] = @Title, " +
                "[DepartmentID] = @DeptID, " +
                "[Department] = @Dept, " +
                "[Timestamp] = @Time" +
                " WHERE ID = @WF_ID";

SqlParameter = ID, App, First, Last, Title, DeptID, Dept, Time;
ID = new SqlParameter("@WF_ID", 42);
App = new SqlParameter("@App", 0);
First = new SqlParameter("@First", "Bruce");
Last = new SqlParameter("@Last", "Wayne");
Title = new SqlParameter("@Title", "BATMAN");
DeptID = new SqlParameter("@DeptID", 1234);
Dept = new SqlParameter("@Dept", "Justice League");
Time = new SqlParameter("@Time", DateTime.Now);
SQL_Command.Parameters.Add(ID);
SQL_Command.Parameters.Add(App);
SQL_Command.Parameters.Add(First);
SQL_Command.Parameters.Add(Last);
SQL_Command.Parameters.Add(Title);
SQL_Command.Parameters.Add(DeptID);
SQL_Command.Parameters.Add(Dept);
SQL_Command.Parameters.Add(Time);
SQL_Command.Connection = conn;
SQL_Command.ExecuteNonQuery();

参数化SQL UPDATE命令会导致“声明标量变量错误”

错误消息非常清楚,正在处理的SQL包含参数@WF_IDUPDATE,并且没有向SqlCommand添加相应的参数。

该参数名称不包含在您共享的代码中。实际执行的SQL很可能与问题中显示的不同。

尝试在中断调试器

SQL_Command.ExecuteNonQuery();

以及检查CCD_ 4的值。在那里查找@WF_IDUPDATE

此外,请仔细检查在出现编译器错误后是否没有运行以前版本的程序(即,检查代码是否仍在编译)。