C# ASP.NET:数据库中的记录don';我不能得到更新

C# ASP.NET:数据库中的记录don';我不能得到更新,c#,asp.net,C#,Asp.net,我正在尝试更新我的数据库记录,但没有进行任何更改,也没有错误消息。我检查了语法,发送的值,一切都很好。。 有什么建议吗 这是单击[保存]按钮时执行的我的代码: ds.UpdateCommand = "UPDATE Users SET Fullname='" + fname.Text + "', Permission='" + per.SelectedValue + "',

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

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

ds.UpdateCommand = "UPDATE Users 
                    SET Fullname='" + fname.Text + "',
                        Permission='" + per.SelectedValue + "', 
                        Email='" + email.Text + "', 
                        phone='" + phone.Text + "' 
                    WHERE UserID=" + Session["userID"].ToString();
ds.Update();
我正在从用户填写的表单中读取值
ds
是一个
SqlDataSource

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


编辑:

此页面供用户更新其信息

我正在根据数据库中已有的用户信息在
页面上设置表单值

用户编辑其信息并单击[保存]

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

}

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

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

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

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


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

基本上,如果您有一个
数据集,并且希望使用该数据集更新数据库,您需要:

  • 如中所示定义
    UpdateCommand
    ,以引用将用于更新的
    数据表中的列

  • 更新
    数据集中某个
    数据表
    s中的现有行

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

我还建议您详细阅读ADO.NET数据模型以及使用数据集和数据表的工作原理-例如,此处


当然,另一种选择是创建一个
SqlConnection
和一个
SqlCommand
,使用参数化查询自己进行插入,而无需为数据集和数据表所涉及的所有麻烦和努力。但是在这种情况下,请确保始终使用参数化查询(并且从不只是将包含直接来自用户输入的值的SQL语句连接在一起…)-

我怀疑
会话[“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是int类型的,不需要被括起来,我试图给它添加引号。如何查看生成的查询字符串并手动运行它?我还应该添加哪些详细信息?使用调试器。设置后,
UpdateCommand
的值是多少?不,它不是空的,我也这么认为,我检查了它。我编辑了这个问题,你能看一下吗?试着用上面的方法更新你的页面加载事件,你的问题是控件总是保留默认值。现在我希望它能实现当我第一次添加'if(!IsPostBack)'时,我没有查看数据库,我只是检查查询字符串。。不知道我在想什么。。谢谢,它正在工作:)我正在使用
SqlDataSource
更新数据库。我不知道我还需要添加更多步骤。它正在使用
insert
delete