ASP.NET:数据库中的记录don';无法更新

本文关键字:更新 don 记录 NET 数据库 ASP | 更新日期: 2023-09-27 18:24:18

我正在尝试更新数据库记录,但没有进行任何更改,也没有错误消息。我检查了语法,我发送的值,一切都很好。。有什么建议吗?

这是我在点击[保存]按钮时执行的代码:

ds.UpdateCommand = "UPDATE Users 
                    SET Fullname='" + fname.Text + "',
                        Permission='" + per.SelectedValue + "', 
                        Email='" + email.Text + "', 
                        phone='" + phone.Text + "' 
                    WHERE UserID=" + Session["userID"].ToString();
ds.Update();

我正在从用户填写的表单中读取值dsSqlDataSource

如果我必须添加更多细节,请告诉我


编辑:

此页面供用户更新他/她的信息

我正在根据数据库中已经存在的用户信息设置Page_Load上的表单值。

用户编辑他/她的信息并点击[保存]

在设置了braekpoints之后,我发现查询字符串采用的是默认值,而不是新值。我该怎么办?


整个代码:

    protected void Page_Load(object sender, EventArgs e)
{
    Session["userID"] = Request.QueryString["id"];
        SqlConnection cn = new SqlConnection();
        cn.ConnectionString = ds.ConnectionString;
        cn.Open();
        SqlCommand cm = new SqlCommand();
        cm.Connection = cn;
        cm.CommandText = "select * from Users where UserID='" + Session["userID"].ToString() + "'";
        SqlDataReader dr;
        dr = cm.ExecuteReader();
        if (dr.Read())
        {
            uname.Text = dr["username"].ToString();
            fname.Text = dr["Fullname"].ToString();
            per.SelectedValue = dr["Permission"].ToString();
            email.Text = dr["Email"].ToString();
            phone.Text = dr["phone"].ToString();
        }
        else Response.Redirect("Default.aspx");
        dr.Close();
        cn.Close();
}
protected void Button3_Click(object sender, EventArgs e)
{
    ds.UpdateCommand = "update Users set Fullname='" + fname.Text + "', Permission='" + per.SelectedValue + "', Email='" + email.Text + "', phone='" + phone.Text + "' where UserID=" + Session["userID"].ToString();
    ds.Update();
    Response.Redirect("control_pan.aspx");
}

ASP.NET:数据库中的记录don';无法更新

基本上,如果你有一个DataSet,并且你想用它来更新你的数据库,你需要:

  • 如MSDN文档中所示定义UpdateCommand,以引用DataTable中的列,这些列将用于更新

  • 更新DataSet 内某个DataTable中的现有行

  • 完成此操作后,可以在数据集(或数据表)上调用.Update()来执行更新-ADO.NET将检查对DataTable的任何行的更新,如果找到更新,则将执行UpdateCommand,参数绑定到有问题的DataTable的行的值

我还建议详细阅读ADO.NET数据模型以及使用DataSets和DataTables的工作原理,例如这里的UpdateDataUsing.NETDataSet

当然,另一种选择是创建一个SqlConnectionSqlCommand,使用参数化查询自己进行插入,而不需要使用DataSet和DataTables带来的所有麻烦和精力。但在这种情况下,请确保ALWAYS使用参数化查询(而NEVER只是将SQL语句连接在一起,包括直接来自用户输入的值……)-请参阅此处的原因

我怀疑Session["UserID"]为空。将光标放在ds.Update();上,然后按F9,以检查该设置的断点。
若要查看结果查询,请在断点暂停操作时将鼠标指针悬停在ds.UpdateCommand上。

更新:将代码放入页面加载中,只执行一次,即第一次页面加载时

if(!IsPostBack)
 {
    //put your code here
 }

更新

protected void Page_Load(object sender, EventArgs e)
{
 if(!IsPostBack)
 {
  Session["userID"] = Request.QueryString["id"];
    SqlConnection cn = new SqlConnection();
    cn.ConnectionString = ds.ConnectionString;
    cn.Open();
    SqlCommand cm = new SqlCommand();
    cm.Connection = cn;
    cm.CommandText = "select * from Users where UserID='" + Session["userID"].ToString() + "'";
    SqlDataReader dr;
    dr = cm.ExecuteReader();
    if (dr.Read())
    {
        uname.Text = dr["username"].ToString();
        fname.Text = dr["Fullname"].ToString();
        per.SelectedValue = dr["Permission"].ToString();
        email.Text = dr["Email"].ToString();
        phone.Text = dr["phone"].ToString();
    }
    else Response.Redirect("Default.aspx");
    dr.Close();
    cn.Close();
 }
}

我非常怀疑您是否在这里提供了足够的详细信息来解决这个问题。

那个类型是UserID?该值是否需要用引号括起来?

您是否在WHERE子句中设置了正确的值,该值是否存在于数据库中?您需要查看生成的查询字符串,然后手动运行它以确定可能出现的错误。

另外,字符串不应该有@字符前缀,这样换行符就成为了字符串的一部分吗?这真的是你的代码吗?

当然,如果不了解更多关于代码的信息,就很难说它还可能是什么。