【问题标题】:One a DELETE query, how to know that there was nothing to delete?一个DELETE查询,怎么知道没有什么要删除的?
【发布时间】:2023-03-20 12:21:01
【问题描述】:

我目前正在完善与 SQL-Server 基础相关的 C# 应用程序。

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

问题是: 在删除操作中,我进行了这种查询:

DELETE FROM table 
 WHERE ID = @ID 

它会删除我要求它删除的内容,但是如果查询在数据库中找不到任何内容怎么办? 我怎样才能检测到呢? 因为在这种情况下,应用程序不会删除任何内容,也不会引发异常。 简而言之,我只想告诉用户在这种情况下没有什么可删除的。

【问题讨论】:

  • 值得注意的是,如果任何行具有ID=@ID,您的查询将从表中删除所有数据。也就是说,您要么删除整个表,要么什么都不删除。这是你想要的吗?
  • 不,感谢您顺便指出这一点

标签: c# .net sql select


【解决方案1】:
delete from table where ID=@id
select @@rowcount

这将返回实际删除的行数。你不需要存在。

【讨论】:

  • 该查询与帖子中的查询具有不同的行为。 OP 很可能需要exists!
  • 我认为您应该阅读在这种情况下存在的内容。与行 ID 逐行比较。
  • 我认为您应该重新阅读原始查询。如果表中有任何单行ID=@ID 则存在将返回true for all rows,因此所有行都将被删除。 (也就是说,OP 已确认这是他的错误,因此欢迎您改变行为。)
【解决方案2】:

如果你使用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
    }
}

【讨论】:

  • 如果只调用该特定查询,则该方法很好。但是在问题中没有这样的说法..所以我想知道这篇文章怎么这么好:)
【解决方案3】:

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2010-10-16
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多