正在尝试更新sql server中的表,但无法工作

本文关键字:工作 更新 server sql | 更新日期: 2023-09-27 18:20:55

我正在尝试更新sql server中的表,但它不起作用。这是我的代码

SqlConnection conn;
    string connString = ConfigurationManager.ConnectionStrings["Alumnidb"].ConnectionString;
    string userName;
    SqlCommand cmdProfile, cmdUpdate;
    SqlDataReader reader;
    string UserId;
    protected void Page_Load(object sender, EventArgs e)
    {
        userName = Request.QueryString["UserName"].ToString();
        RetriveProfile();
    }
    protected void RetriveProfile()
    {
        conn = new SqlConnection(connString);
        cmdProfile = new SqlCommand("SELECT Name, UserId FROM UserProfile WHERE UserName=@UserName",conn);
        cmdProfile.Parameters.AddWithValue("@UserName",userName);
        conn.Open();
        reader = cmdProfile.ExecuteReader();
        while (reader.Read())
        {
            TextBoxName.Text = reader["Name"].ToString();
            UserId = reader["UserId"].ToString();
        }
        conn.Close();
    }
    protected void buttonUpdate_Click(object sender, EventArgs e)
    {
        conn = new SqlConnection(connString);
        cmdUpdate = new SqlCommand("UPDATE UserProfile SET Name=@Name WHERE UserId=@UserId",conn);
        cmdUpdate.Parameters.AddWithValue("@UserId",UserId);
        cmdUpdate.Parameters.AddWithValue("@Name",TextBoxName.Text.ToString());
        conn.Open();
        cmdUpdate.ExecuteScalar();
        conn.Close();
    }

和.aspx文件

Name: <asp:TextBox ID="TextBoxName" runat="server" ></asp:TextBox>
<asp:Button ID="buttonUpdate" runat="server"  Text="UpDate" 
        onclick="buttonUpdate_Click"/>

它显示了以前更新的值。我签入了sql server,其中也没有任何更改我做错了什么?您的帮助将不胜感激。Thanx

正在尝试更新sql server中的表,但无法工作

问题是,即使在回发中,也要填充Page_Load中的所有值。因此,如果用户单击更新按钮,首先触发Page_Load,则从数据库加载所有值,并将TextBox.Text值设置为旧值。所以所有的改变都失去了。

因此使用IsPostBack属性:

protected void Page_Load(object sender, EventArgs e)
{
    userName = Request.QueryString["UserName"].ToString();
    if(!IsPostBack)
        RetriveProfile();
}

由于您从sql查询中获得UserID,并且在更新中需要它,因此您有几个选项。您可以在回发中持久化用户ID,例如在ViewStateSession中。这可以在RetriveProfile中完成。

protected void RetriveProfile()
{
    conn = new SqlConnection(connString);
    cmdProfile = new SqlCommand("SELECT Name, UserId FROM UserProfile WHERE UserName=@UserName",conn);
    cmdProfile.Parameters.AddWithValue("@UserName",userName);
    conn.Open();
    reader = cmdProfile.ExecuteReader();
    while (reader.Read())
    {
        TextBoxName.Text = reader["Name"].ToString();
        UserId = reader["UserId"].ToString();
    }
    conn.Close();
}

将字段UserID更改为属性:

private string UserId {
    get { return (string)ViewState["UserID"]; }
    set { ViewState["UserID"] = value;}
}

请注意,由于HTTP的无状态性,所有变量都会在每个页面的生命周期结束时进行处理。因此,你需要在某个地方坚持下去。

用于管理ASP.NET应用程序中持久用户状态的九个选项