ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-06-22 10:54:19  阅读:389  来源: 互联网

标签:c sql sql-server smo executenonquery


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

我正在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有