C# System.Data.SqlClient.SqlException:';必须声明标量变量';

C# System.Data.SqlClient.SqlException:';必须声明标量变量';,c#,sql-server,sqlclient,C#,Sql Server,Sqlclient,我已经检查了其他有相关错误的线程,但是没有一个与我的问题在特定级别上相关 我试图通过WPF表单中的文本框编辑更新数据,并通过更新按钮提交到SQL数据库。打开表单并选择用户时,将加载初始/当前数据。它将在SQL数据库中相应的文本框中显示与它们相关的所有信息,当我想要更改加载的信息并更新它时,问题就出现了 在“da.UpdateCommand.ExecuteOnQuery();”行中,它抛出了一个错误,即@FirstName的标量变量尚未声明,但在注释该变量时,它只会转到下一行,并将继续执行。所以它

我已经检查了其他有相关错误的线程,但是没有一个与我的问题在特定级别上相关

我试图通过WPF表单中的文本框编辑更新数据,并通过更新按钮提交到SQL数据库。打开表单并选择用户时,将加载初始/当前数据。它将在SQL数据库中相应的文本框中显示与它们相关的所有信息,当我想要更改加载的信息并更新它时,问题就出现了

在“da.UpdateCommand.ExecuteOnQuery();”行中,它抛出了一个错误,即@FirstName的标量变量尚未声明,但在注释该变量时,它只会转到下一行,并将继续执行。所以它与任何一个参数都没有特别的关系

我在数据库中仔细检查了所有数据类型是否正确,并确保没有输入错误(尽管有可能我漏掉了一个)

如果有任何关于这可能是什么原因的想法,我都会很感激,因为我一直在用它撞墙

void UpdateEmployee()
    {
        using (SqlConnection con = new SqlConnection(Properties.Settings.Default.adminConnectionString))
        { 
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter
            {
                UpdateCommand = new SqlCommand("UPDATE dbo.EMPLOYEES " +
                "SET FirstName = @FirstNameCL, " +
                "InsuranceDate = @InsuranceDateCL, " +
                "InsurancePlan = @PlanCL, " +
                "InsuranceStatus = @StatusCL, " +
                "InsuranceElig = @EligibleCL" +
                "Department = @Dpt, " +
                "LastName = @LastNameCL, " +
                "DateOfFullTime = @FullTimed, " +
                "DateOfHire = @startdate, " +
                "Passcode = @PasswordCL, " +
                "Phone1 = @HomeCL" +
                "Phone2 = @CellCL, " +
                "Address = @AddressCL, " +
                "IsTempEmp = @Istemp," +
                "Comments = @CommentsCL" +

                "WHERE employeeID = EmpID", con)
            };

            {
                da.UpdateCommand.Parameters.Add("@FirstName",SqlDbType.NVarChar).Value = FirstNameCL.Text;
                da.UpdateCommand.Parameters.Add("@InsuranceDate", SqlDbType.Date).Value = InsuranceDateCL.SelectedDate;
                da.UpdateCommand.Parameters.Add("@InsurancePlan", SqlDbType.VarChar).Value = PlanCL.Text;
                da.UpdateCommand.Parameters.Add("@InsuranceStatus", SqlDbType.VarChar).Value = StatusCL.Text;
                da.UpdateCommand.Parameters.Add("@InsuranceElig", SqlDbType.VarChar).Value = EligibleCL.Text;
                da.UpdateCommand.Parameters.Add("@Depeartment", SqlDbType.VarChar).Value = Dpt.Text;
                da.UpdateCommand.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = LastNameCL.Text;
                da.UpdateCommand.Parameters.Add("@DateOfFullTime", SqlDbType.Date).Value = fulltimed.SelectedDate;
                da.UpdateCommand.Parameters.Add("@DateofHire", SqlDbType.Date).Value = startdate.SelectedDate;
                da.UpdateCommand.Parameters.Add("@Passcode", SqlDbType.VarChar).Value = PasswordCL.Text;
                da.UpdateCommand.Parameters.Add("@Phone1", SqlDbType.VarChar).Value = HomeCL.Text;
                da.UpdateCommand.Parameters.Add("@Phone2", SqlDbType.VarChar).Value = CellCL.Text;
                da.UpdateCommand.Parameters.Add("@Address", SqlDbType.VarChar).Value = AddressCL.Text;
                da.UpdateCommand.Parameters.Add("@IsTempEmp", SqlDbType.VarChar).Value = Istemp.Text;
                da.UpdateCommand.Parameters.Add("@Comments", SqlDbType.NVarChar).Value = CommentsCL.Text;

                con.Open();
                da.UpdateCommand.ExecuteNonQuery();
                con.Close();

            }
        }
    }


    #region Update Button

    private void BtnUpdate_Click(object sender, EventArgs e)
    {
        UpdateEmployee();
        System.Windows.Forms.MessageBox.Show("Employee data successfully updated.");

    }
    #endregion
应该是

"SET FirstName = @FirstName, " 
取决于以下情况:

da.UpdateCommand.Parameters.Add("@FirstName",SqlDbType.NVarChar).Value = FirstNameCL.Text;

是正确的变量名。

参数的第一个参数。Add是参数名:

public System.Data.SqlClient.SqlParameter Add (string parameterName, System.Data.SqlDbType sqlDbType);

da.UpdateCommand.Parameters.Add("@FirstName",SqlDbType.NVarChar).Value = FirstNameCL.Text;

@FirstName与sql命令不匹配

您的参数名中有CLs:
@FirstNameCL
我建议您使用(
@“…”
)而不是串联。您提到的一个参数名是
@CommentsCLWHERE
。我已经将它们向后声明了,我不知道为什么我没有更早地注意到这一点。
public System.Data.SqlClient.SqlParameter Add (string parameterName, System.Data.SqlDbType sqlDbType);

da.UpdateCommand.Parameters.Add("@FirstName",SqlDbType.NVarChar).Value = FirstNameCL.Text;