原文:https://www.cnblogs.com/sdusrz/p/4433108.html

执行SqlDataReader.Read之后,如果还想用另一个SqlCommand执行Insert或者Update操作的话,会得到一个错误提示:There is already an open DataReader associated with this Command which must be closed first.,然后一般就会产生数据保存失败的异常。

解决方法是在ConnectionString中加上一个参数“MultipleActiveResultSets”, 将其值设置为true。

SqlConnection conn = new SqlConnection("server=s01;database=MOULTONWEB;uid=sa;pwd=cn1234567890;MultipleActiveResultSets=True

MultipleActiveResultSets属性详解

ADO.NET 1.x 利用SqlDataReader读取数据,针对每个结果集需要一个独立的连接。当然,你还必须管理这些连接并且要付出相应的内存和潜在的应用程序中的高度拥挤的瓶颈代价-特别是在数据集中的Web应用程序中。

ADO.NET 2.的一个新特征多数据结果集(Multiple Active Result Sets,简称MARS)-它允许在单个连接上执行多重的数据库查询或存储过程。这样的结果是,你能够在单个连接上得到和管理多个、仅向前引用的、只读的结果集。目前实现这个功能的数据库只有Sql Server 2005。所以当我们针对Sql Sever 2005的时候,需要重新审视DataReader对象的使用。使用SqlServer 2005,可以在一个Command对象上同时打开多个DataReader,节约数据库联接所耗费的服务器资源,在实际开发中普遍存在的一种典型的从数据库中读写数据的情形是,你可以使用多重连接而现在只用一个连接就足够了。例如,如果你有一些来自于几个表中的数据-它们不能被联结到一个查询中,那么你就会有多重的连接-每个连接都有一个与之相关连的命令用于读取数据。同样,如果你正在向一个表写数据,那么你需要另外一个连接或连接集合-如果有多个表要被更新的话。

例如下面的代码

       //MultipleActiveResultSets=true打开联接

            string connstr = "server=(local);database=northwind;integrated security=true;MultipleActiveResultSets=true"; 

            SqlConnection conn = new SqlConnection(connstr);
conn.Open();
SqlCommand cmd1 = new SqlCommand("select * from customers", conn);
SqlCommand cmd2 = new SqlCommand("select * from orders", conn);
SqlDataReader rdr1 = cmd1.ExecuteReader();
// next statement causes an error prior to SQL Server 2005
SqlDataReader rdr2 = cmd2.ExecuteReader();
// now you can reader from rdr1 and rdr2 at the same time. conn.Close();

近期的一个项目是关于不同数据库同步的操作,考虑到数据的及时性,应用程序的性能,在数据库链接字符串中加入MultipleActiveResultSets;

MultipleActiveResultSets的作用是指定多活动的结果集是否与指定的链接相互关联;类型是bool类型;true代表与指定的链接关联;false代表与指定的链接不关联;默认是false;

最新文章

  1. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业
  2. MySQL MVCC(多版本并发控制)
  3. Mongodb基本操作说明
  4. Redis集群(六):集群常用命令及说明
  5. AngularJs $http 请求服务
  6. Collection、Map、数组 遍历方式
  7. Sql如何自动定时备份数据库
  8. XAML数据绑定(Data Binding)
  9. 使用HttpOnly提升Cookie安全性
  10. Asp.Net获取IP的方法
  11. android AsyncTask异步下载并更新进度条
  12. Eclispe使用Maven添加官方库的jar包
  13. Winter is coming Just have a little faith. JSF框架简介与实例
  14. 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”
  15. 华为手机APK 汉语译名
  16. 打字机效果-so easy
  17. [W班]第二次结对作业成绩评价
  18. 《Java面向对象编程》
  19. python3之Splash
  20. jQuery 与 prototype 共存

热门文章

  1. Java之final、static关键字及匿名对象
  2. phpmyadmin解决“高级功能尚未完全设置,部分功能未激活”
  3. Java编程基础-字符串
  4. 解决 FusionCharts3.2.1 首页无法载入的问题
  5. 分布式定时任务的redis锁实现
  6. springMVC中ajax和后台数据格式错误
  7. 微软爆料新型系统,Windows7,Windows10强势来袭
  8. dlopen与dlsym用法
  9. 洛谷 P2353 背单词
  10. codevs 2776 寻找代表元