0

我正在尝试更新 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,那里也没有变化我做错了什么?您的帮助将不胜感激。. .谢谢

4

1 回答 1

1

问题是Page_Load即使您处于回发状态,您也会填写所有值。因此,如果用户首先点击更新按钮Page_Load,则所有值都会从数据库中加载,并将TextBox.Text值设置为旧值。因此,所有更改都丢失了。

所以使用IsPostBack属性:

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

由于您是UserID从 sql 查询中获取的,并且在更新中需要它,因此您有几个选项。您可以在回发中保留用户 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 应用程序中管理持久用户状态的九个选项

于 2013-07-04T11:09:43.933 回答