C#和SQL Server:当UPDATE工作时,ExecuteNonQuery返回-1?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#和SQL Server:当UPDATE工作时,ExecuteNonQuery返回-1?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1414字,纯文字阅读大概需要3分钟。
内容图文
如果之前有人问过,请道歉.我搜索了一个小时,但没有找到我遇到的确切问题.
我正在使用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 Server:当UPDATE工作时,ExecuteNonQuery返回-1?全部内容,希望文章能够帮你解决C#和SQL Server:当UPDATE工作时,ExecuteNonQuery返回-1?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。