任何人都可以帮我解决这个错误。 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();
}
欢迎发表评论以获取更多详情。
答案 0 :(得分:2)
正如JW在 comment 上所说,你不需要在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();
答案 1 :(得分:1)
您多次添加@UserID
个参数
答案 2 :(得分:0)
1)删除查询中Image=@Image
后的逗号。
2)cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["UserID"].ToString();
写入两次,删除其中一个。