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();
我正在从用户填写的表单中读取值ds
是SqlDataSource
如果我必须添加更多细节,请告诉我
编辑:
此页面供用户更新他/她的信息
我正在根据数据库中已经存在的用户信息设置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");
}
基本上,如果你有一个DataSet
,并且你想用它来更新你的数据库,你需要:
-
如MSDN文档中所示定义
UpdateCommand
,以引用DataTable
中的列,这些列将用于更新 -
更新
DataSet
内某个DataTable
中的现有行 -
完成此操作后,可以在数据集(或数据表)上调用
.Update()
来执行更新-ADO.NET将检查对DataTable
的任何行的更新,如果找到更新,则将执行UpdateCommand
,参数绑定到有问题的DataTable
的行的值
我还建议详细阅读ADO.NET数据模型以及使用DataSets和DataTables的工作原理,例如这里的UpdateDataUsing.NETDataSet
当然,另一种选择是创建一个SqlConnection
和SqlCommand
,使用参数化查询自己进行插入,而不需要使用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子句中设置了正确的值,该值是否存在于数据库中?您需要查看生成的查询字符串,然后手动运行它以确定可能出现的错误。
另外,字符串不应该有@
字符前缀,这样换行符就成为了字符串的一部分吗?这真的是你的代码吗?
当然,如果不了解更多关于代码的信息,就很难说它还可能是什么。