MultipleActiveResultSets=True 还是多个连接?

Posted

技术标签:

【中文标题】MultipleActiveResultSets=True 还是多个连接?【英文标题】:MultipleActiveResultSets=True or multiple connections? 【发布时间】:2010-10-05 09:13:13 【问题描述】:

我有一些 C#,在其中我在连接上创建了一个阅读器 (ExecuteReader),然后对于该阅读器中的每一行,执行另一个命令(使用 ExecuteNonQuery)。在这种情况下,我是在我的连接上使用MultipleActiveResultSets=True 还是使用多个连接更好?

【问题讨论】:

【参考方案1】:

专门为此类操作添加了多个活动结果集 (MARS),因此您不必同时打开两个连接即可从 SqlDataReader 读取并执行其他批处理。

MARS 与 SQL Server 2005 及更高版本兼容。引用 MSDN 文档:

在引入Multiple之前 活动结果集 (MARS),开发人员 必须使用多个连接 或服务器端游标来解决 某些场景。

更多信息见:

MSDN Library - MARS Overview

读取和更新数据的工作示例:

MSDN Library - Manipulating Data (MARS) 向下滚动到“使用 MARS 读取和更新数据”

【讨论】:

【参考方案2】:

据我所知,这是添加 MARS 的原因,所以是的,我认为您应该使用它。

【讨论】:

【参考方案3】:

最好的测试方法是启动 SQLServer Profiler,看看服务器端到底发生了什么。

我的猜测是它不会更好,因为您使用的是 ExecuteNonQuery()。所以,事实上,你不会处理多个结果。

【讨论】:

这就是我写代码时的想法,但如果我没有 MultipleActiveResultSets=True ,那么我仍然会得到一个“已经有一个打开的 DataReader 与此命令关联,必须先关闭。 " ExecuteNonQuery 异常。

以上是关于MultipleActiveResultSets=True 还是多个连接?的主要内容,如果未能解决你的问题,请参考以下文章

连接字符串中缺少 MultipleActiveResultSets 导致错误

用于 SQL Server 和 VB.NET 应用程序的 MultipleActiveResultSets

[EF] - "已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭" 之解决

轻量级ORM框架 第二篇:Dapper

已经打开的 DataReader 的连接字符串出现问题

Dapper use Table Value Parameter in C# (Sql Server 数组参数)