更新语句中关键字'where'附近的语法不正确

时间:2013-09-22 08:58:18

标签: c# asp.net sql-server

我正在尝试更新数据,但它显示错误。

protected void Button2_Click(object sender, EventArgs e)//Update
{
    {
        SqlConnection con = new SqlConnection(@"Data Source=SYSTEM2\SQLEXPRESS;Initial Catalog=amresh;Integrated Security=True");
        SqlCommand cmd = new SqlCommand("UPDATE detail SET name='" + TxtBox_name.Text + "',address='" + TexBo_add.Text + "', WHERE contact_no='" + TexBo_num.Text + "'",con);
        con.Open();
        cmd.ExecuteNonQuery();
        ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('record updated');", true);
        con.Close();
    }
}

3 个答案:

答案 0 :(得分:3)

哦,在如此狭小的空间里有这么多错误:

  • 实际的SQL错误只是一个不必要的逗号
  • 但是:你有SQL注入问题
  • 和丢失的处置

我非常喜欢使用工具来帮助避免疼痛。使用“dapper”'

也是如此
using(var con = new SqlConnection(ConnectionString)) 
{
     con.Execute(@"update detail
         set name=@name, address=@address
         where contact_no = @num",
         new {
             name = TxtBox_name.Text,
             address = TexBo_add.Text,
             num = TexBo_num.Text
        });
}

此外,它可能也想成为:

...
num = int.Parse(TexBo_num.Text)
...

然后 - 在同一方法中提到UI控件和数据访问的代码可能意味着你的UI代码做得太多了。

答案 1 :(得分:2)

首先,Little Bobby Tables就像一件便宜的西装一样。其次,请查看documenation of SqlCommand以获取如何使用参数进行更新的示例。

答案 2 :(得分:0)

您需要在,之前移除where(逗号)。

SqlCommand cmd = new SqlCommand("UPDATE detail SET name='" + TxtBox_name.Text + "',address='" + TexBo_add.Text + "', WHERE contact_no='" + TexBo_num.Text + "'", con);
                                                                                                                   ^

但我建议您使用Parameterized查询。

string query= "UPDATE detail SET name=@name, address=@address WHERE contact_no=@contactno";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@name", TxtBox_Name.Text);
cmd.Parameters.AddWithValue("@address", TexBo_add.Text);
cmd.Parameters.AddWithValue("@contactno", TexBo_num.Text);