重新审视SqlDataReader的使用

简介:
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";  None.gif
              SqlConnection conn = new SqlConnection(connstr);
None.gif            conn.Open();
None.gif            SqlCommand cmd1 = new SqlCommand("select * from customers", conn);
None.gif            SqlCommand cmd2 = new SqlCommand("select * from orders", conn);
None.gif            SqlDataReader rdr1 = cmd1.ExecuteReader();
None.gif           // next statement causes an error prior to SQL Server 2005
None.gif            SqlDataReader rdr2 = cmd2.ExecuteReader();
None.gif           // now you can reader from rdr1 and rdr2 at the same time.
              conn.Close();

              Streamline your Data Connections by Moving to MARS, by Laurence Moroney, DevX.com >>





本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/75019,如需转载请自行联系原作者
目录
相关文章
|
29天前
|
SQL 算法 大数据
SQL 的困难源于关系代数
SQL 的数学基础就是关系代数,是用来实现批量结构化数据计算的代数体系,这也是采用 SQL 的数据库又被叫做关系数据库的原因。 关系代数已经发明五十年了,五十年前的应用需求以及硬件环境,和今天比的差异是很巨大了。由于存量用户太多,而且也还没有成熟的新技术出现,基于关系代数设计的 SQL,今天仍然是最重要的数据库开发语言。虽然这几十年来也有一些改进完善,但根子并没有变,面对当代的复杂需求和硬件环境,关系数据库并没有那么得心应手了。
|
6月前
|
SQL 网络协议 数据库连接
在 ABAP 层执行 Open SQL 的幕后操作 - 武侠版
在 ABAP 层执行 Open SQL 的幕后操作 - 武侠版
35 0
|
4月前
|
存储 SQL 缓存
解锁MSSQL存储过程优化之道:参数化查询的技术深度探究
解锁MSSQL存储过程优化之道:参数化查询的技术深度探究
|
10月前
|
数据安全/隐私保护
浅谈《机房收费系统》重构中的Boolean和Datatable
浅谈《机房收费系统》重构中的Boolean和Datatable
|
设计模式 存储 数据库
【机房重构】——Sqlhelper
【机房重构】——Sqlhelper
87 0
|
SQL 索引
朴实无华但实用的SQL大全,超乎你想象
朴实无华但实用的SQL大全,超乎你想象
94 0
朴实无华但实用的SQL大全,超乎你想象
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 9丨平均工资:部门与公司比较【难度困难】
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 9丨平均工资:部门与公司比较【难度困难】
艾伟_转载:DataTable.NewRow 内存泄漏问题
  昨天做了一个自动生成Insert 语句的小工具,今天测试发现存在严重的内存泄漏问题,代码看了好几遍,没发现问题。后来用 .Net Memory Profiler 跟踪(跟踪方法见 用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇) 发现有数千个DataRow 没有释放,最后定位是DataTable.NewRow 的问题。
915 0