C# 更新在网页中不起作用

C# 更新在网页中不起作用,c#,asp.net,C#,Asp.net,有一个用户登录的网站。我导航到用户信息页面,通过基于用户名从数据库检索信息来显示信息。用户名是唯一的。我在文本框中显示所有信息,如下所示: SqlCommand cmd = new SqlCommand(query,con); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); txtFirstName.Text = sdr[0].ToString(); txtLastName.Text = sdr[1].ToString(); txtAge

有一个用户登录的网站。我导航到用户信息页面,通过基于用户名从数据库检索信息来显示信息。用户名是唯一的。我在文本框中显示所有信息,如下所示:

SqlCommand cmd = new SqlCommand(query,con);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
txtFirstName.Text = sdr[0].ToString();
txtLastName.Text = sdr[1].ToString();
txtAge.Text = sdr[3].ToString();
txtUserName.Text = sdr[4].ToString();
然后,允许用户在相同的文本框中修改更改并允许他们进行更新

string query = "UPDATE users SET FirstName=@firstName,LastName=@lastName,Age=@age,UserName=@userName WHERE UserName='"+userName+"'";

con.Open();
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@firstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("@lastName", txtLastName.Text);
cmd.Parameters.AddWithValue("@age", txtAge.Text);
cmd.Parameters.AddWithValue("@userName", txtUserName.Text);
cmd.ExecuteNonQuery();

但用户更改的值不会发送到db。我以前也做过类似的代码,它已经成功了。但现在它无法更新。我哪里出错了。

在您的评论中,您说这种情况发生在
页面加载过程中

SqlCommand cmd = new SqlCommand(query,con);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
txtFirstName.Text = sdr[0].ToString();
txtLastName.Text = sdr[1].ToString();
txtAge.Text = sdr[3].ToString();
txtUserName.Text = sdr[4].ToString();
页面中,每次请求页面对象实例化时,都会调用Load
。因此,即使您正在单击一个按钮而不是最初请求页面,该按钮也会导致服务器上对该页面的请求,因此
page\u Load
在该请求上的按钮的单击处理程序之前运行

所以现在发生的是:

  • 您请求该页面
  • Page\u Load
    将当前值插入控件
  • 您可以更改页面上的值
  • 你点击一个按钮
  • Page\u Load
    将当前值插入控件
  • 使用控件中的值更新数据库
看到倒数第二行了吗?调试此操作时,请在加载页面的
中包含断点。在保存之前,您正在覆盖这些值

您可以通过将初始化代码包装在一个复选框中,以
IsPostBack
,来解决此问题:

if (!IsPostBack)
{
    SqlCommand cmd = new SqlCommand(query,con);
    SqlDataReader sdr = cmd.ExecuteReader();
    sdr.Read();
    txtFirstName.Text = sdr[0].ToString();
    txtLastName.Text = sdr[1].ToString();
    txtAge.Text = sdr[3].ToString();
    txtUserName.Text = sdr[4].ToString();
}

调试时,它在哪里失败?查询的代码是否运行过?数据库或任何地方的代码是否有错误?查询是用运行时期望的值构造的吗?你是如何证实这一点的?我们无法为您测试,您需要提供一些运行时调试信息。请查看。这个问题可以帮助您尝试用另一个参数替换Where子句中的用户名-可能是@OriginalUserName。。。这可能会解决问题,也可能不会解决问题,但它会解决您可能遇到的SQL注入问题。当我将光标移动到cmd.Parameters.AddWithValue(“@age”,txtAge.Text)时;它仍然具有旧值如何将新值传递给验证密码的代码,以及该代码如何将新值传递给实际更新数据库的代码?如果可以,你应该在某个地方发布一个极其简化的代码版本;除非你接受的答案事实上解决了你的问题。如果是这样的话,如果其他人也遇到了同样的问题,即忘记检查<代码> ISPrStuts<代码>,那么很难找到其他问题。请考虑编辑你的问题,以更好地揭露问题;或者删除它。非常感谢@David。我过去常常把ddl和网格的填充一般放在回发检查中,但没有做到这一点。谢谢