我有从查询中删除行的问题(我正在使用MySQL lite),我使用数据绑定的comobox来选择要删除的内容但我收到此错误{"列名无效'足球'。"}执行命令
con.Open();
SqlCommand cm = new SqlCommand("DELETE FROM Sports WHERE Sport = " + cbSelectSport.Text + "", con);
cm.ExecuteNonQuery();
MessageBox.Show("Done");
con.Close();
答案 0 :(得分:1)
请注意语法。
我不知道运动专栏的类型,但我认为需要将您的价值用引号(单或双)括起来。
new SqlCommand("DELETE FROM Sports WHERE Sport = \"" + cbSelectSport.Text + "\", con);
或
new SqlCommand("DELETE FROM Sports WHERE Sport = '" + cbSelectSport.Text + "', con);
答案 1 :(得分:1)
几乎在每种情况下都应该避免字符串连接。您应该尽可能使用参数化查询。您可以避免转换,SQL注入攻击以及代码通常更快,因为服务器可以重用执行计划
编写参数化查询也更容易:
using(var con=new SqlConnection(...))
{
con.Open();
var cm = new SqlCommand("DELETE FROM Sports WHERE Sport = @sports", con);
var parameter=cm.Parameters.AddWithValue("@sports",cbSelectSport.Text);
cm.ExecuteNonQuery();
MessageBox.Show("Done");
};
这样,参数值将在带外传递(即在查询之外)而不转换为文本。当您想要传递小数或日期值时,这非常有用。
大多数人都会警告不要使用AddWithValue
,因为它根据输入值做出太多假设会影响性能。在这种情况下,您可以使用Add
创建参数,然后设置其值,大小,精度等:
var parameter=cm.Parameters.Add("@sports",SqlDbType.NVarChar);
parameter.Size=20;
parameter.Value=cbSelectSport.Text;
答案 2 :(得分:0)
您必须在单引号''中指定文本值。
SqlCommand cm = new SqlCommand("DELETE FROM Sports WHERE Sport = '" + cbSelectSport.Text + "'", con);
答案 3 :(得分:0)
您可能想要添加单引号:
SqlCommand cm = new SqlCommand("DELETE FROM Sports WHERE Sport = '" + cbSelectSport.Text + "'", con);
答案 4 :(得分:0)
您应该使用参数化查询来防止SQL注入攻击。它也将解决您的问题。顺便说一句,您只需在查询中添加单引号即可。
"DELETE FROM Sports WHERE Sport = '" + cbSelectSport.Text + "'"