SQL删除查询无法正常工作

时间:2012-08-13 15:59:21

标签: c# winforms visual-studio-2010 sql-server-2008

我的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")

我已确认其他动词选择更新工作,而不是删除的具体命令。

2 个答案:

答案 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();

设置断点并将该查询复制粘贴到此处的注释中,以便我们可以看到它。