错误:变量名称在查询批处理或存储过程中必须是唯一的.关键字';附近的语法不正确;其中';

本文关键字:唯一 关键字 其中 不正确 语法 查询 变量名 批处理 过程中 存储过程 存储 | 更新日期: 2023-09-27 18:19:34

有人能帮我解决这个错误吗。IT表示,

变量名称"@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();
    }

欢迎发表评论以了解更多详细信息。

错误:变量名称在查询批处理或存储过程中必须是唯一的.关键字';附近的语法不正确;其中';

正如JW在他的评论中所说,在sql查询中,WHERE部分之前不需要使用逗号。

正确使用这些;

    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();

    else
    {
        cmd.Parameters.Add("@Image", SqlDbType.Text).Value = imgAvatar.ImageUrl;
    }
  here --> cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["UserID"].ToString();

您多次向添加@UserID参数

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

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