我正在尝试更新我的数据库记录,但没有进行任何更改,也没有错误消息。我检查了语法,我发送的值,一切都很好.. 有什么建议?
这是我点击[保存]按钮时执行的代码:
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");
}
答案 0 :(得分:2)
基本上,如果您有DataSet
并且想要使用它来更新数据库,则需要:
定义UpdateCommand
,如MSDN documentation所示,以引用DataTable
中将用于更新的列
更新DataTable
DataSet
内的现有行
完成后,您可以在数据集(或数据表)上调用.Update()
来执行更新 - ADO.NET将检查对任何行的更新DataTable
,如果找到更新,那么UpdateCommand
将被执行,参数绑定到DataTable
的行的值
我还建议您详细了解ADO.NET数据模型以及使用DataSet和DataTables的工作原理 - 例如这里Update Data Using .NET DataSets
当然,替代方法是创建SqlConnection
和SqlCommand
,使用参数化查询自行进行插入,无需麻烦和省力涉及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();
}
}