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