C# 错误:变量名在查询批处理或存储过程中必须是唯一的。关键字';其中';

C# 错误:变量名在查询批处理或存储过程中必须是唯一的。关键字';其中';,c#,asp.net,visual-studio-2010,C#,Asp.net,Visual Studio 2010,有人能帮我解决这个错误吗。上面说, 已声明变量名“@UserID”。变量名 在查询批处理或存储过程中必须是唯一的。不正确 关键字“WHERE”附近的语法 错误出现在cmd.ExecuteNonquery()上 这是我的密码: protected void btnUpdateAccount_Click(object sender, EventArgs e) { con.Open(); SqlCommand cmd = new SqlCommand();

有人能帮我解决这个错误吗。上面说,

已声明变量名“@UserID”。变量名 在查询批处理或存储过程中必须是唯一的。不正确 关键字“WHERE”附近的语法

错误出现在
cmd.ExecuteNonquery()上

这是我的密码:

protected void btnUpdateAccount_Click(object sender, EventArgs e)
    {
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        if (txtPassword.Text == "")
        {
            cmd.CommandText = "UPDATE Users SET EmailAddress=@EmailAddress, FirstName=@FirstName, " +
                "LastName=@LastName, Address=@Address, ContactNo=@ContactNo, Image=@Image, " +
                "WHERE UserID=@UserID";
        }
        else
        {
            cmd.CommandText = "UPDATE Users SET Password=@Password, EmailAddress=@EmailAddress, FirstName=@FirstName, " +
                "LastName=@LastName, Address=@Address, ContactNo=@ContactNo, Image=@Image, " +
                "WHERE UserID=@UserID";
        }
        cmd.Parameters.Add("@EmailAddress", SqlDbType.NVarChar).Value = txtEmail.Text;
        cmd.Parameters.Add("@Password", SqlDbType.NVarChar).Value = Helper.CreateSHAHash(txtPassword.Text);
        cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFN.Text;
        cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLN.Text;
        cmd.Parameters.Add("@Address", SqlDbType.NVarChar).Value = txtAddress.Text;
        cmd.Parameters.Add("@ContactNo", SqlDbType.NVarChar).Value = txtContact.Text;
        cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["userid"].ToString();
        if (fuImage.HasFile)
        {
            cmd.Parameters.Add("@Image", SqlDbType.Text).Value = "images/" + fuImage.FileName;
            fuImage.SaveAs(Server.MapPath("~/images/" + fuImage.FileName));
        }
        else
        {
            cmd.Parameters.Add("@Image", SqlDbType.Text).Value = imgAvatar.ImageUrl;
        }
        cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["UserID"].ToString();

        if (txtPassword.Text != "")
        {
            cmd.Parameters.Add("@Password", SqlDbType.NVarChar).Value=
                Helper.CreateSHAHash(txtPassword.Text);
        }

        cmd.ExecuteNonQuery();
        con.Close();
        GetProfileInfo();

        pnlUpdated.Visible = true;
        Helper.AddLog(Session["userid"].ToString(), "Update", "Updated Profile Information");
        GetProfileInfo();
    }

请随时发表评论以了解更多详细信息。

您多次添加了
@UserID
参数

,正如JW在他的文章中所说,您不需要在sql查询的
部分前面使用逗号

正确使用这些工具

    if (txtPassword.Text == "")
    {
        cmd.CommandText = "UPDATE Users SET EmailAddress=@EmailAddress, FirstName=@FirstName, " +
            "LastName=@LastName, Address=@Address, ContactNo=@ContactNo, Image=@Image " +
            "WHERE UserID=@UserID";
    }
    else
    {
        cmd.CommandText = "UPDATE Users SET Password=@Password, EmailAddress=@EmailAddress, FirstName=@FirstName, " +
            "LastName=@LastName, Address=@Address, ContactNo=@ContactNo, Image=@Image " +
            "WHERE UserID=@UserID";
    }
您还在查询中添加了两次
@UserID
参数。在
SqlCommand
中,然后将其作为参数添加。你不能那样做您需要删除其中一个。您可以检查它们

    cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLN.Text;
    cmd.Parameters.Add("@Address", SqlDbType.NVarChar).Value = txtAddress.Text;
    cmd.Parameters.Add("@ContactNo", SqlDbType.NVarChar).Value = txtContact.Text;
  here --> cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["userid"].ToString();

1) 删除查询中
Image=@Image
后面的逗号


2)
cmd.Parameters.Add(“@UserID”,SqlDbType.Int).Value=Session[“UserID”].ToString()被写入两次,请删除其中一个。

问题在于:
Image=@Image,
。删除WHERE子句之前的多余逗号,就完成了。@JW웃, 我试过了,现在它给了我这个错误,“变量名'@UserID'已经声明。变量名在查询批处理或存储过程中必须是唯一的。”你添加了两次@UserID参数…@user251437,因为你有两个
cmd.Parameters。在你的代码中添加(“@UserID”,…
,删除其中一个。你们真是太棒了:)我不是一个真正的程序员,但我真的非常想学习,在你的帮助下,这对我来说更容易学习。
    else
    {
        cmd.Parameters.Add("@Image", SqlDbType.Text).Value = imgAvatar.ImageUrl;
    }
  here --> cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["UserID"].ToString();