3

我的 sqldelete查询中有一个逻辑错误,它不会在 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")

我已经确认其他动词selectupdate等)有效,只是不是 delete 的特定命令

4

2 回答 2

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)您检查命令是否有效的方法是可疑的。例如,如果您依赖计数,并且 where 子句匹配零行,则该命令有效,但它没有删除任何内容,因此计数保持不变。

如果这些都不正确,那么转到我的答案的第 1 行。这里没有魔法,删除命令要么影响 0 行或多行,要么返回异常。其他任何事情都只能通过不正确的故障排除/调试来解释。

于 2012-08-13T16:34:31.233 回答
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();

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

于 2012-08-13T16:39:50.573 回答