如何删除数据库中的单个项目? 当我单击“删除”按钮时,我的代码将删除与列表框中selectedItem相同的所有项目。例如,如果我选择从我的列表框中删除CocaCola,我希望它删除数据库中的单个CocaCola项目而不是所有CocaCola项目。
我的代码:
conn.Open();
SqlCommand cmd = new SqlCommand("delete from Products Where Product ='"+lstProducts.SelectedItem+"'", conn);
cmd.ExecuteNonQuery();
conn.Close();
答案 0 :(得分:1)
如果保留哪些行并不重要,您可以使用TOP(1)
:
DELETE TOP (1)
FROM Products
Where Product = @Product
请注意,您应该使用sql参数而不是字符串concatanation来防止sql注入和其他不太严重的问题。
MSDN:
当TOP与DELETE一起使用时,引用的行不会被排列 任何订单和ORDER BY子句都不能直接指定 这个说法。如果需要使用TOP删除有意义的行 按时间顺序,您必须将TOP与ORDER BY子句一起使用 在子选择声明中。请参阅下面的示例部分 这个话题。 TOP不能在DELETE语句中使用 分区视图。
度Acc。到TOP(1)
:
为了向后兼容,括号在SELECT中是可选的 声明。我们建议您始终在TOP中使用括号 SELECT语句与在INSERT中的必需用法的一致性, 括号所在的UPDATE,MERGE和DELETE语句 需要强>
答案 1 :(得分:1)
您可以尝试使用TOP:
SqlCommand cmd = new SqlCommand("delete top (1) from Products Where Product ='"+lstProducts.SelectedItem+"'", conn);
cmd.ExecuteNonQuery();
此外,您的代码很容易出现SQL注入。您可以使用参数化查询来摆脱它。
答案 2 :(得分:1)
对于此行为,您需要具有外键唯一的Product列,否则您需要传递ID或其他唯一列。