【问题标题】:Unable to update database in ASP.NET无法在 ASP.NET 中更新数据库
【发布时间】:2014-11-26 18:55:36
【问题描述】:

我想将一条记录更新到数据库中,但它只是不断恢复到其原始值。 下面是我的代码。我也没有显示任何错误。

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CandidateConnectionString"].ConnectionString);
conn.Open();

string updateData = "UPDATE Resume SET [Work_Experience] = @work_exp, [Educational_Level] = @edu_level, [Field_Of_Study] = @field_study, [University_Name] = @uni_name, [University_Location] = @uni_locate, [Graduation_Year] = @gra_year WHERE Cand_ID = (SELECT Cand_ID FROM Candidate WHERE Cand_Username = '"+ usernamelbl.Text +"')";
SqlCommand cmd = new SqlCommand(updateData, conn);
cmd.Parameters.AddWithValue("@work_exp", Work_Exp.Text);
cmd.Parameters.AddWithValue("@edu_level", Edu_Level.SelectedItem.Text);
cmd.Parameters.AddWithValue("@field_study", Field_Study.SelectedItem.Text);
cmd.Parameters.AddWithValue("@uni_name", Uni_Name.Text);
cmd.Parameters.AddWithValue("@uni_locate", Uni_Locate.Text);
cmd.Parameters.AddWithValue("@gra_year", Year.Text);

cmd.ExecuteNonQuery();

conn.Close();

代码有问题吗?

【问题讨论】:

  • 如果您单步执行代码,您确定您的代码正在执行吗?另外,您确定 where 子句是正确的吗?如果直接对数据库执行此 SQL(而不是通过代码),它会产生什么影响?
  • 你能在查询后放一个断点,看看 usernamelbl.text 是否给你值。请检查一次
  • @mason 我不确定我的代码是否正在执行,但WHERE 子句是正确的。我只是直接在数据库上执行,记录更新完美。
  • 在代码中设置断点,然后逐行执行。是时候学习使用调试器了!如果您使用的是 Visual Studio,方向为 here。学习单步调试代码是成为一名成功的程序员必须学习的一项宝贵技能。
  • 通过直接在 sql server 中执行来检查更新查询。

标签: c# asp.net .net sql-update


【解决方案1】:

我刚刚发现了一个愚蠢的错误..

在 page_Load 事件中,我有一行代码从数据库中获取值

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CandidateConnectionString"].ConnectionString);
                conn.Open();
                string getdata = "SELECT * FROM Resume WHERE Cand_ID = (SELECT Cand_ID FROM Candidate WHERE Cand_Username = '" + usernamelbl.Text + "')";
                SqlCommand com = new SqlCommand(getdata, conn);
                SqlDataAdapter sda = new SqlDataAdapter(com);
                DataSet ds = new DataSet();
                sda.Fill(ds, "Resume");
                Work_Exp.Text = ds.Tables["Resume"].Rows[0]["Work_Experience"].ToString();
                Edu_Level.Text = ds.Tables["Resume"].Rows[0]["Educational_Level"].ToString();
                Field_Study.Text = ds.Tables["Resume"].Rows[0]["Field_Of_Study"].ToString();
                Uni_Name.Text = ds.Tables["Resume"].Rows[0]["University_Name"].ToString();
                Uni_Locate.Text = ds.Tables["Resume"].Rows[0]["University_Location"].ToString();
                Year.Text = ds.Tables["Resume"].Rows[0]["Graduation_Year"].ToString();
                conn.Close();

但我没有将它包含在if(!IsPostBack) 下,这就是我提交时的原因,它会覆盖我的当前值并将其恢复为原始状态。感谢那些试图帮助我整理并教我新东西的人。 :)

【讨论】:

  • 现在您已经有了工作代码,下一步应该是修复 SQL 注入问题,并将其正确包装在我上面评论的 using 语句中。
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2021-01-27
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多