数据库
首页 > 数据库> > C#和SQL Server:当UPDATE工作时,ExecuteNonQuery返回-1?

C#和SQL Server:当UPDATE工作时,ExecuteNonQuery返回-1?

作者:互联网

如果之前有人问过,请道歉.我搜索了一个小时,但没有找到我遇到的确切问题.

我正在使用SMO对SQL Server运行一些查询,因为我已经读过这可以处理GO语句,而不是System.Data.SqlClient.

我正在运行此查询:

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO  

UPDATE Program
SET ENABLED = '1'
WHERE Program_ID = '64' AND Program_Name = 'DoesSomething' 

我通过以下方式捕获“受影响的行”:

int numberOfRows = db.ConnectionContext.ExecuteNonQuery(s.Query);

我遇到的问题是每次返回值为-1.我在后台检查数据库,并且每次都更新值,当我在SSMS中手动运行查询时,我收到(1行受影响)确认.

在阅读了其他一些帖子之后,我开始认为问题可能出在此查询的前四行中.我删除了GO语句,返回的查询值为1而不是-1.

我的组写的大多数查询/脚本都有GO,SET ANSI_NULLS ON和SET QUOTED_IDENTIFIER ON几乎是标准的所以它到处都是(另一天的另一个问题 – 我知道它在这种情况下过度/不相关).这会以某种方式影响我的行数吗?如果是这样,你能为解决方法提供一些方向,或者为获得这个结果提供另一条路线吗?

是的…我知道ExecuteNonQuery应该返回受影响的行数.我只需要知道为什么它没有返回我认为应该的东西(在这种情况下为1).

解决方法:

GO是SQLCMD,OSQL和其他工具使用的批量分离器.由于SMO的ServerConnection.ExecuteNonQuery恰好识别SQLCMD命令,它会为您处理批处理分隔符并执行您在文本中发出的每个批处理.系列的“返回”值不是一个明确的命令,因为每个批次可能有自己的返回(更不用说每个批次可能包含多个语句).所以我会把这种“回报”的价值带上一粒盐.如果要确认更新的行数,请在UPDATE中使用OUTPUT子句并使用结果集,或将@@ ROWCOUNT分配给输出变量.

标签:c,sql,sql-server,smo,executenonquery
来源: https://codeday.me/bug/20190622/1262673.html