我的sql delete
查询中出现了逻辑错误,该错误在visual studio中没有出现任何错误,也没有删除数据库中的记录
以下是我的代码片段
SqlCommand cmd = new SqlCommand(
@"DELETE FROM table_name
WHERE item_id=" + itmIDs +
" AND vendor_id=" + vendIDs +
" AND dozen=" + selectedItmDzn +
" AND quantity=" + selectedItmQty +
" AND total_price=" + selectedItmTotPrc + "",
con);
cmd.ExecuteNonQuery();
这是我的conString
SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=InvenotyBB;Integrated Security=SSPI")
我已确认其他动词(选择,更新,等)工作,而不是删除的具体命令。
答案 0 :(得分:3)
我几乎可以保证你的连接字符串有:
User Instance=true;AttachDbFileName=|Data Directory|...something.mdf;
如果是这种情况,请停止这样做。 AttachDbFileName功能实际上会创建数据库文件的副本。因此,您在Management Studio或Visual Studio中打开的那个与通过连接字符串创建的应用程序不同。您的应用程序从副本中删除,没有例外(因为它有效),您刷新原始文件,看起来它不起作用。
请参阅@ marc_s的答案:
https://stackoverflow.com/a/7222952/61305
如果不是这样,那么我怀疑(a)由于某处try/catch
而忽略了错误,或者(b)检查命令是否有效的方法。例如,如果您依赖于count,并且where子句匹配零行,则命令工作但它没有删除任何内容,因此计数保持不变。
如果这些都不是真的,那么转到我答案的第1行。这里没有魔法,删除命令会影响0行或更多行,否则它将返回异常。其他任何事情只能通过不正确的故障排除/调试来解释。
答案 1 :(得分:2)
鉴于此原始代码(通过我的格式化):
SqlCommand cmd = new SqlCommand(
@"DELETE FROM table_name
WHERE item_id=" + itmIDs +
" AND vendor_id=" + vendIDs +
" AND dozen=" + selectedItmDzn +
" AND quantity=" + selectedItmQty +
" AND total_price=" + selectedItmTotPrc + "",
con);
cmd.ExecuteNonQuery();
我们将其更改为:
string deleteQuery =
@"DELETE FROM table_name
WHERE item_id=" + itmIDs +
" AND vendor_id=" + vendIDs +
" AND dozen=" + selectedItmDzn +
" AND quantity=" + selectedItmQty +
" AND total_price=" + selectedItmTotPrc + "";
SqlCommand cmd = new SqlCommand(deleteQuery, con); /* set a breakpoint here */
cmd.ExecuteNonQuery();
设置断点并将该查询复制粘贴到此处的注释中,以便我们可以看到它。