Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL删除查询无法正常工作_C#_Winforms_Visual Studio 2010_Sql Server 2008 - Fatal编程技术网

C# SQL删除查询无法正常工作

C# SQL删除查询无法正常工作,c#,winforms,visual-studio-2010,sql-server-2008,C#,Winforms,Visual Studio 2010,Sql Server 2008,我的sqldelete查询中有一个逻辑错误,在visual studio中不会出现任何错误,并且没有删除数据库中的记录 下面是我的代码片段 SqlCommand cmd = new SqlCommand( @"DELETE FROM table_name WHERE item_id=" + itmIDs + " AND vendor_id=" + vendIDs + " AND dozen=" + selectedItmDzn +

我的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();
这是我的解释

SqlConnection con=newsqlconnection(“数据源=localhost;初始目录=invenotyb;集成安全=SSPI”)


我已确认其他动词(选择更新)有效,只是删除的特定命令无效。我几乎可以保证您的连接字符串具有:

User Instance=true;AttachDbFileName=|Data Directory|...something.mdf;
如果是这种情况,停止这样做。AttachDbFileName功能实际上创建了数据库文件的副本。因此,在ManagementStudio或VisualStudio中打开的应用程序与通过连接字符串创建的应用程序不同。你的应用程序从副本中删除,没有异常(因为它工作了),你刷新了原始文件,看起来好像它不工作

请参见@marc_'s的答案:

如果不是这样,那么我怀疑(a)由于某个地方的
try/catch
而忽略了错误,或者(b)您检查命令是否工作的方法是可疑的。例如,如果您依赖一个计数,并且where子句匹配零行,那么该命令工作,但没有删除任何内容,因此计数保持不变

如果这两个都不是真的,那么转到我答案的第一行。这里没有魔法,delete命令要么影响0行或更多行,要么返回异常。任何其他问题都只能通过错误的故障排除/调试来解释。

鉴于此原始代码(通过我的格式):

让我们将此更改为:

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

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

能否将SQL存储在变量中并显示控制台的结果。WriteLine(SQL)?您还可以检查您的连接字符串,并验证您没有使用愚蠢和误导性的功能,如
用户实例
附件文件名
?您的数据库中的表名为
表名
?@Pete如果是这样,我将放弃,请检查您的连接字符串。如果您使用的是
AttachDbFileName
您的删除操作正常,但您检查的是错误的数据库副本(因为该连接字符串创建了一个副本)。@Musa这样编辑Q不会得到更多的结果。回答已经被问到的问题将是非常重要的。关于“你指的是哪两个”,我指的是两个选项:[在这方面寻求帮助]和[我知道我的问题不可能是错误的,显然我做的是正确的]。如果你做对了,你就不会问,或者,你知道<代码>控制台.WriteLine(deleteQuery):)你假设他有一个控制台要写。大假设。因此微笑。在将sql代码移动到应用程序之前,我通常在控制台中测试sql代码——通常正是出于这个原因。
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();