2012-09-21 46 views
4

我目前正在抛光与SQL-Server基础相关的C#应用​​程序。一个DELETE查询,怎么知道没有东西要删除?

这很简单,您可以通过应用程序的某些字段从SQL表中添加或删除条目。

的问题是: 在一个删除的行为,我做了这样的查询:

DELETE FROM table 
WHERE ID = @ID 

它删除什么,我要求它删除,但如果查询没有找到的东西D B ? 我该如何检测? 因为在这种情况下,应用程序不会删除任何内容,并且不会引发异常。 为了简短起见,我只想告诉用户在这种情况下没有什么可以删除的。

+2

值得一提的是,您的查询将删除*所有*从表中的数据,如果*行的任何*有'ID = @ ID' 。也就是说,你要么删除整个表或者什么都不删除。那是你的意图吗? –

+0

不,谢谢你指出,顺便说一句 – Jan

回答

11

如果您使用的是SqlCommand对象,有一种方法称为ExecuteNonQuery。该方法返回有多少行受到影响。所以,零意味着没有。

private static void CreateCommand(string queryString, 
    string connectionString) 
{ 
    using (SqlConnection connection = new SqlConnection(
       connectionString)) 
    { 
     SqlCommand command = new SqlCommand(queryString, connection); 
     command.Connection.Open(); 
     int rowsAffected = command.ExecuteNonQuery(); // <== this 
    } 
} 
+0

如果仅调用特定查询,则该方法很好。但在这个问题上没有这样的说法..所以我想知道这个帖子是如此的好:) –

+1

我的一天,谢谢。 – Jan

3
delete from table where [email protected] 
select @@rowcount 

这将返回有多少行实际上是删除。你不需要存在。

+0

该查询有不同的行为,在帖子中。 OP可能需要'存在'! –

+0

我认为你应该阅读在这种情况下存在的东西。它是与行ID进行逐行比较。 –

+0

我认为你应该重读原始查询。如果在表中有任何单行*且ID为ID,那么存在将为所有行返回true,因此所有行都将被删除。 (也就是说,OP已经证实这是他的错误,因此欢迎您改变行为。) –

相关问题