DELETE FROM表WHERE var = value不会删除条目

时间:2012-06-19 11:57:52

标签: sql ms-access

所以我从c#中通过

从mdb文件中获取了一些数据
"SELECT * FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE Note = '" + listBox2.GetItemText(listBox2.SelectedItem).Replace("'","\'") + "'";

选择正确的数据,这里是

SELECT * FROM Main WHERE Note ='Hello'

mdb数据结构看起来像是一个CSV文件:

"Record ID";Status;Placement;Private;Category;Note;Blob
14341665;4;2147483647;True;3;"""Hello"" - Neues

但是当我尝试用

删除条目时
"DELETE FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE \"Record ID\" LIKE '" + dr[0] + "';";

"DELETE FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE \"Record ID\" = '" + dr[0] + "';";

,例如

DELETE FROM Main WHERE "Record ID" LIKE '14341665';

参赛作品就在那里。我可以重新运行select命令,甚至重启我的应用程序,mdb不会改变。

3 个答案:

答案 0 :(得分:4)

记录ID是数字字段吗?如果是这样,请丢失报价。

DELETE FROM Main WHERE [Record ID] = 14341665;

请注意,字段(列)名称中的空格始终是个问题。这些列名必须用方括号括起来,用保留字命名的列也是如此。

答案 1 :(得分:1)

记录ID是数字,所以不要在它周围放置撇号:

"DELETE FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE \"Record ID\" = " + dr[0]

注意:您应该避免在生产代码中使用select *,您应该指定要返回的数据。此外,您应该使用参数化查询,而不是将值连接到查询中。

答案 2 :(得分:0)

如果我没记错,“喜欢”仅适用于字符串数据,请检查记录ID的数据类型。

如果记录ID是数字,您可能希望使用数据库的转换函数将其转换为字符串,然后使用“like”进行过滤。

顺便说一下,记得要确保dr [0]被正确转义。