正在尝试更新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
问题是,即使在回发中,也要填充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,例如在ViewState
或Session
中。这可以在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应用程序中持久用户状态的九个选项