ASP.NET中的更新导致异常:“0”;必须声明标量变量“;

ASP.NET中的更新导致异常:“0”;必须声明标量变量“;,asp.net,sql-server,sqlexception,Asp.net,Sql Server,Sqlexception,我正试图更新我的学生表中的某个记录,但同样的异常不断出现: System.Data.SqlClient.SqlException:必须声明标量变量“@sid” 请给我任何建议,因为我似乎找不到我的代码有任何错误 这是我的更新查询的代码: if (conn.State == System.Data.ConnectionState.Closed) { conn.Open(); String sid = txtSearch.Text; SqlCommand cmd2 = n

我正试图更新我的
学生
表中的某个记录,但同样的异常不断出现:

System.Data.SqlClient.SqlException:必须声明标量变量“@sid”

请给我任何建议,因为我似乎找不到我的代码有任何错误

这是我的更新查询的代码:

if (conn.State == System.Data.ConnectionState.Closed)
{
    conn.Open();

    String sid = txtSearch.Text;

    SqlCommand cmd2 = new SqlCommand("UPDATE [Student] SET [Password] = @pass, [StudentName] = @studName, [Email] = @email, [PhoneNumber] = @number, [Faculty] = @faculty, [Course] = @course WHERE [StudentID] = @sid", conn); 

    cmd2.Parameters.AddWithValue("@pass", txtPassword.Text);
    cmd2.Parameters.AddWithValue("@studName", txtStudentName.Text);
    cmd2.Parameters.AddWithValue("@email", txtEmail.Text);
    cmd2.Parameters.AddWithValue("@number", txtPhoneNum.Text);
    cmd2.Parameters.AddWithValue("@faculty", ddlFaculty.SelectedValue);
    cmd2.Parameters.AddWithValue("@course", ddlCourse.SelectedValue);

    cmd2.ExecuteNonQuery(); 

    Response.Write("<script>alert('Record updated successfully!')</script>");
    conn.Close();

    Clear();
}
if(conn.State==System.Data.ConnectionState.Closed)
{
conn.Open();
字符串sid=txtSearch.Text;
SqlCommand cmd2=新SqlCommand(“更新[学生]设置[密码]=@pass,[StudentName]=@studName,[Email]=@Email,[PhoneNumber]=@number,[Faculty]=@Faculty,[Course]=@Course其中[StudentID]=@sid],conn”);
cmd2.Parameters.AddWithValue(“@pass”,txtPassword.Text);
cmd2.Parameters.AddWithValue(“@studName”,txtStudentName.Text);
cmd2.Parameters.AddWithValue(“@email”,txtEmail.Text);
cmd2.Parameters.AddWithValue(“@number”,txtPhoneNum.Text);
cmd2.Parameters.AddWithValue(“@faculty”,ddlfculty.SelectedValue);
cmd2.Parameters.AddWithValue(“@course”,ddlcurse.SelectedValue);
cmd2.ExecuteNonQuery();
写入(“警报('记录更新成功!'”);
康涅狄格州关闭();
清除();
}

您错过了@sid param

    if (conn.State == System.Data.ConnectionState.Closed)
    {
        conn.Open();

        String sid = txtSearch.Text;
        SqlCommand cmd2 = new SqlCommand("UPDATE [Student] SET [Password]=@pass
            , [StudentName]=@studName
            , [Email]=@email
            , [PhoneNumber]=@number
            , [Faculty]=@faculty
            , [Course]=@course 
        WHERE [StudentID]=@sid", conn); 
        cmd2.Parameters.AddWithValue("@pass", txtPassword.Text);
        cmd2.Parameters.AddWithValue("@studName", txtStudentName.Text);
        cmd2.Parameters.AddWithValue("@email", txtEmail.Text);
        cmd2.Parameters.AddWithValue("@number", txtPhoneNum.Text);
        cmd2.Parameters.AddWithValue("@faculty", ddlFaculty.SelectedValue);
        cmd2.Parameters.AddWithValue("@course", ddlCourse.SelectedValue);
        cmd2.Parameters.AddWithValue("@isid", sid);     // <------
        cmd2.ExecuteNonQuery(); 

        Response.Write("<script>alert('Record updated successfully!')</script>");
        conn.Close();

        Clear();
    }
if(conn.State==System.Data.ConnectionState.Closed)
{
conn.Open();
字符串sid=txtSearch.Text;
SqlCommand cmd2=新SqlCommand(“更新[学生]设置[密码]=@pass
,[StudentName]=@studName
,[Email]=@Email
,[PhoneNumber]=@number
,[Faculty]=@Faculty
,[Course]=@Course
其中[StudentID]=@sid”,康涅狄格州);
cmd2.Parameters.AddWithValue(“@pass”,txtPassword.Text);
cmd2.Parameters.AddWithValue(“@studName”,txtStudentName.Text);
cmd2.Parameters.AddWithValue(“@email”,txtEmail.Text);
cmd2.Parameters.AddWithValue(“@number”,txtPhoneNum.Text);
cmd2.Parameters.AddWithValue(“@faculty”,ddlfculty.SelectedValue);
cmd2.Parameters.AddWithValue(“@course”,ddlcurse.SelectedValue);

cmd2.Parameters.AddWithValue(“@isid”,sid);//您尚未在此处为@sid赋值,其中[StudentID]=@sid@Sergey您好,我实际上分配了一个文本框值“txtSearch.Text”进入sid,如更新查询前的语句所示。这也不准确吗?请参见下面的答案。您需要添加类似于cmd2的内容。参数。AddWithValue(@sid),sid)刚刚检查了下面的答案,效果非常好!感谢您的帮助:)您应该签出并停止使用
.AddWithValue()
-它可能会导致意外的结果。。。