1

誰でもこのエラーで私を助けてくれますか? それは言う、

変数名 '@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();
    }

詳細については、お気軽にコメントを投稿してください。

4

3 に答える 3

2

JW が彼のコメントWHEREで述べたように、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また、クエリにパラメーターを 2 回追加しました。あなた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();
于 2013-06-24T06:56:43.050 に答える
1

@UserIDパラメータを複数回追加しました

于 2013-06-24T06:56:28.563 に答える
0

1) クエリの後のコンマを削除しImage=@Imageます。

2)cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["UserID"].ToString();が 2 回書かれている場合は、どちらかを削除してください。

于 2013-06-24T07:12:22.763 に答える