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