【发布时间】:2018-09-15 17:03:30
【问题描述】:
如果之前有人问过这个问题,我们深表歉意。我已经搜索了一个小时,但没有找到我遇到的确切问题。
我正在使用 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)。
【问题讨论】:
-
你在使用实体框架吗?
-
Is this affecting my row count somehow?你已经证明是的,并且你有解决方案。我不知道为什么会有所不同,但是您说过额外的语句是excessive/irrelevant in this case。 -
GOis not (SQL)语句 - 它只是 SQL Server Management Studio 使用的 delimiter (这就是为什么使用“正常” SQL 不起作用 - 因为GO真的不是 SQL 语句......) -
@marc_s 这就是为什么 OP 使用 可以 处理 GO 的 SMO。
-
@DanWilson 我已将此查询设置为测试。所以在我的情况下,这些语句是无用的,但我正在尝试创建一个可以运行它们的小程序,因为我知道事实上这些语句需要用于我的团队构建的更大查询,所以这就是我尝试的原因运行这个来解决问题。
标签: c# sql sql-server smo executenonquery