无法从单列表中删除行

时间:2015-02-24 15:47:20

标签: c# sql-server winforms

我有从查询中删除行的问题(我正在使用MySQL lite),我使用数据绑定的comobox来选择要删除的内容但我收到此错误{"列名无效'足球'。"}执行命令

        con.Open();
        SqlCommand cm = new SqlCommand("DELETE FROM Sports WHERE Sport = " + cbSelectSport.Text + "", con);
        cm.ExecuteNonQuery();
        MessageBox.Show("Done");
        con.Close();

5 个答案:

答案 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 + "'"