【发布时间】:2020-08-05 14:50:32
【问题描述】:
我正在使用 Visual Studio 2019 使用 ASP.NET 创建一个网站。在网络表单上,我有一些来自 SQL 表的数据,我想在单击按钮时对其进行更新。这是我单击按钮时调用的函数:
void updateUserPersonalDetails()
{
try
{
SqlConnection con = new SqlConnection(strcon);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand cmd = new SqlCommand("UPDATE member_master_tbl SET full_name=@full_name, dob=@dob WHERE member_id='" + Session["username"].ToString().Trim() + "'", con);
cmd.Parameters.AddWithValue("@full_name", TextBoxFullName.Text.Trim());
cmd.Parameters.AddWithValue("@dob", TextBoxDOB.Text.Trim());
int result = cmd.ExecuteNonQuery();
con.Close();
if (result > 0)
{
Response.Write("<script>alert('Details Updated Successfully');</script>");
}
else
{
Response.Write("<script>alert('Invalid entry');</script>");
}
}
catch (Exception ex)
{
Response.Write("<script>alert('" + ex.Message + "');</script>");
}
}
我收到详细信息已更新的警报,但实际上它们并未更新。其他查询(如 SELECT 和 INSERT)可以正常工作,因此问题不在于连接。我尝试使用 Linq 来执行此操作,但得到了相同的结果。
【问题讨论】:
-
member_id是数据库中的数字还是字符串类型?显示 sql 查询运行时值。 -
请检查会话参数值。
-
为什么不为member_id创建参数?
-
除了上述问题,这些问题对于诊断正在发生的事情有很好的方向,我建议作为一个良好做法当你得到一个关闭连接例外,可能在 catch 甚至在 finally 中,所以你总是关闭它。
-
有点 OT,但我建议将 "Session["username"].ToString().Trim()" 转换为参数,例如@username - 根据您的字段类型,可能存在很多问题,例如通过用户名 "'or 1=1 ;--" 进行 sql 注入
标签: c# asp.net visual-studio sql-update