-1

データを更新しようとしていますが、エラーが表示されています。

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();
    }
}
4

3 に答える 3

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 コードがやりすぎていることを意味します。

于 2013-09-22T09:15:42.553 に答える
2

まず第一に、Little Bobby Tablesは安物のスーツのようにあちこちに配置されます。次に、パラメーターを使用して更新する方法の例については、 SqlCommand のドキュメントを参照してください。

于 2013-09-22T09:01:30.030 に答える
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);
于 2013-09-22T09:03:33.207 に答える