ASP.NET:数据库中的记录不会更新

时间:2012-02-12 19:27:46

标签: c# asp.net

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

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

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");

}

3 个答案:

答案 0 :(得分:2)

基本上,如果您有DataSet并且想要使用它来更新数据库,则需要:

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

  • 更新DataTable

  • 内某个DataSet内的现有行
  • 完成后,您可以在数据集(或数据表)上调用.Update()来执行更新 - ADO.NET将检查对任何行的更新DataTable,如果找到更新,那么UpdateCommand将被执行,参数绑定到DataTable的行的值

我还建议您详细了解ADO.NET数据模型以及使用DataSet和DataTables的工作原理 - 例如这里Update Data Using .NET DataSets

当然,替代方法是创建SqlConnectionSqlCommand,使用参数化查询自行进行插入,无需麻烦和省力涉及DataSet和DataTables。但在这种情况下,请确保始终使用参数化查询(并且 NEVER 只是将您的SQL语句连接在一起,包括直接来自用户输入的值.....) - {{ 3}}

答案 1 :(得分:0)

我非常怀疑你在这里提供了足够的细节来解决这个问题。

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

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

此外,您的字符串不应该有@字符前缀,以便换行符是字符串的一部分吗?这真的是你的代码的样子吗?

当然,如果不了解更多有关代码的信息,很难说它还有什么其他内容。

答案 2 :(得分:0)

我怀疑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();
 }
}