抱歉,如果之前有人问过这个问题。我已经搜索了一个小时,但没有找到我遇到的确切问题。
我正在使用 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
分配给输出变量。
关于UPDATE 工作时的 C# 和 SQL Server : ExecuteNonQuery returning -1,?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49679726/