【问题标题】:Returning rows affected from an SQL UPDATE statement [duplicate]返回受 SQL UPDATE 语句影响的行 [重复]
【发布时间】:2013-01-08 10:12:44
【问题描述】:

可能重复:
SQL: Update a row and returning a column value with 1 query
Get affected rows on ExecuteNonQuery

我有一个文本框,用户可以在其中输入他们的 SQL 查询。

示例查询可能是:

UPDATE customer SET isnew = 1;

运行上述查询更新 4 行,我如何获得 SQL Server 返回的 '4 rows affected' 消息。

我尝试过使用InfoMessage,但这只会返回诸如'Changed database context to 'databasenamehere'之类的消息,而不是实际受影响的行。

【问题讨论】:

  • 希望您正在清理您的用户输入的查询!另外:如果您使用command.ExecuteNonQuery() 运行查询;返回值是执行的SQL语句影响的行数
  • 你是如何在 C# 中运行查询的?
  • 要在 C# 中运行我的 SQL,我使用 dataAdapter.Fill(dataSet),然后将数据集分配给 GridViews,因此不能使用命令中的 recordsAffected.ExecuteNonQuery

标签: c# asp.net sql-server-2008


【解决方案1】:

SqlCommand.ExecuteNonQuery 返回影响的记录数为int

var command = new SqlCommand("UPDATE customer SET isnew = 1;", conn);
int recordsAffected = command.ExecuteNonQuery();

【讨论】:

  • 见上文,不能使用它,因为我正在使用 dataAdapter.Fill(dataSet) 从我的 sql 查询中获取结果...
  • 你是如何执行 UPDATE 语句的?例如,DataAdapter.Update 还返回受影响的行数。
  • 我正在使用dataAdapter.Fill(dataSet) 来触发我的 UPDATE 语句,sql 语句可能包含几个 UPDATES 和 SELECTS,任何 SELECTS 都分配给 GridView
  • @bluenose1970 Fill 使用适配器的SelectCommand,而不是UpdateCommand。您无法使用Fill 更新数据库。如果您的意思是“刷新”数据集,那么 Fill 还会以 int 形式返回受影响的记录数:int recordsAffected = dataAdapter.Fill(dataSet);
【解决方案2】:

它不会收到你想要的消息,但这会得到相同的计数:

    declare @RC int
(your statement here)
SELECT @RC = @@ROWCOUNT

这将为您提供语句的行数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2017-01-02
    • 2020-01-29
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多