C# & SQL 服务器:ExecuteNonQuery 返回 -1,UPDATE 工作时?
C# & SQL Server : ExecuteNonQuery returning -1, when UPDATE works?
如果之前有人问过这个问题,我们深表歉意。我已经搜索了一个小时,但没有找到我遇到的确切问题。
我正在使用 SMO 运行 一些针对 SQL 服务器的查询,因为我读过它可以处理 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'
我正在通过以下方式捕获 "rows affected":
int numberOfRows = db.ConnectionContext.ExecuteNonQuery(s.Query);
我遇到的问题是这个 return 每次都是 -1 的值。我正在后台检查数据库,它每次都会更新值,当我在 SSMS 中手动 运行 查询时,我收到(1 行受影响)确认。
阅读其他一些帖子后,我认为问题可能出在该查询的前四行中。我删除了 GO
语句,并且查询 returned 的值为 1 而不是 -1。
我的小组写的大多数 queries/scripts 有 GO
、SET ANSI_NULLS ON
和 SET QUOTED_IDENTIFIER ON
几乎是标准的,所以它无处不在(另一天的另一个问题 - 我是请注意,在这种情况下它是 excessive/irrelevant)。这会以某种方式影响我的行数吗?如果是这样,您能否提供一些解决方法的指导或可能获得此结果的其他途径?
是的...我知道 ExecuteNonQuery
应该 return 受影响的行数。我只需要知道为什么它不是 return 我认为应该的(在本例中为 1)。
GO
是SQLCMD、OSQL等工具使用的批处理分隔符。由于 SMO 的 ServerConnection.ExecuteNonQuery
恰好识别 SQLCMD 命令,它会为您处理批处理分隔符并执行您在文本中发出的每个批处理。系列的 'return' 值不是一个明确的命令,因为每个批次可能有自己的 return (更不用说每个批次可能包含多个语句)。所以我会对 'return' 值持保留态度。如果要确认更新的行数,请在 UPDATE 中使用 OUTPUT 子句并生成结果集,或者将 @@ROWCOUNT
分配给输出变量。
如果之前有人问过这个问题,我们深表歉意。我已经搜索了一个小时,但没有找到我遇到的确切问题。
我正在使用 SMO 运行 一些针对 SQL 服务器的查询,因为我读过它可以处理 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'
我正在通过以下方式捕获 "rows affected":
int numberOfRows = db.ConnectionContext.ExecuteNonQuery(s.Query);
我遇到的问题是这个 return 每次都是 -1 的值。我正在后台检查数据库,它每次都会更新值,当我在 SSMS 中手动 运行 查询时,我收到(1 行受影响)确认。
阅读其他一些帖子后,我认为问题可能出在该查询的前四行中。我删除了 GO
语句,并且查询 returned 的值为 1 而不是 -1。
我的小组写的大多数 queries/scripts 有 GO
、SET ANSI_NULLS ON
和 SET QUOTED_IDENTIFIER ON
几乎是标准的,所以它无处不在(另一天的另一个问题 - 我是请注意,在这种情况下它是 excessive/irrelevant)。这会以某种方式影响我的行数吗?如果是这样,您能否提供一些解决方法的指导或可能获得此结果的其他途径?
是的...我知道 ExecuteNonQuery
应该 return 受影响的行数。我只需要知道为什么它不是 return 我认为应该的(在本例中为 1)。
GO
是SQLCMD、OSQL等工具使用的批处理分隔符。由于 SMO 的 ServerConnection.ExecuteNonQuery
恰好识别 SQLCMD 命令,它会为您处理批处理分隔符并执行您在文本中发出的每个批处理。系列的 'return' 值不是一个明确的命令,因为每个批次可能有自己的 return (更不用说每个批次可能包含多个语句)。所以我会对 'return' 值持保留态度。如果要确认更新的行数,请在 UPDATE 中使用 OUTPUT 子句并生成结果集,或者将 @@ROWCOUNT
分配给输出变量。