http://dotnet.chinaitlab.com/ADONET/757364.html

从 ADO.NET 1.x 开始,DataReader 就可以在单一次的查询动作中,「批次 (batch)」读取 T-SQL 语句以取回多个 table (数据表) 的数据,也就是一次能够回传多个「结果集 (Result Set)」,亦即所谓的「批次查询」。其中 DataReader 的 NextResult 方法,是用来取得批次查询中,下一个 Result Set 的结果。例如若要从两个不同的 table 中捞取 column 值,分别绑定至两个 DropDownList 中,我们不需要浪费系统资源去建立两个
DataSource 对象,而可以直接用下列的 Code-behind 代码,仅透过单一次的数据库连结来达成:

         using (SqlConnection conn = new SqlConnection(strConnString))

        {

           conn.Open();

           using (SqlCommand cmd = new SqlCommand())

            {

            cmd.Connection = conn;

            // 利用分号「;」串连多句 SQL 语句,之后再一次丢进数据库去执行,达成「批次」读取或更新

            // 数据库的目的。此技巧亦适用于 INSERT、UPDATE、DELETE 的「批次」执行。

            cmd.CommandText = "SELECT 字段1,字段2 FROM 数据表1 ; SELECT * FROM 数据表2";

            using (SqlDataReader dr = cmd.ExecuteReader())

                {

              while(dr.Read())

                    {

                this.DropDownList1.Items.Add(dr.GetSqlString(0).ToString() + dr.GetSqlInt32(1).ToString());

              }

              dr.NextResult();

              while(dr.Read())

                    {

                this.DropDownList2.Items.Add(dr.GetString(0) + dr.GetInt32(1));

              }

            }

          }

        }

读取时若还有其它的 Result Set,则 NextResult 方法会返回 True;因此我们也可透过返回的布尔值,搭配 While 或 Do Until 等循环,依序再往下读取 Result Set。根据默认,DataReader 会由第一个 Result Set 开始读取。此外,若连结的为 SQL Server 数据库,从 ADO.NET 1.x 开始,DataReader 即支持以 GetSql 开头的方法来取得数据,其「性能 (performance)」会比Get 开头的方法要好。

用NextResult方法取得多个Result Set的更多相关文章

  1. 使用Hibernate的 isNotEmpty( ) 方法 报错: No result defined .... and result dataAccessFailure

    数据访问失败 出错代码: cardy.add(Restrictions.isNotEmpty("grade.cardtype.cardtype")); try...catch之后发 ...

  2. mysql 分页存储过程 一次返回两个记录集(行的条数,以及行记录),DataReader的Read方法和NextResult方法

    DELIMITER $$ USE `netschool`$$ DROP PROCEDURE IF EXISTS `fn_jk_GetCourses`$$ CREATE DEFINER=`root`@` ...

  3. SqlDataReader对象的NextResult方法读取存储过程多个结果集

    如上图,我这里有返回4个记录集,分别表示 发送的总数,成功数,失败数,以及所有的记录集,那么我怎么去获取呢? 如果我第二个记录集 第三个记录集 都是多行的话,怎么办?可以参考下面这张图

  4. DotNet基础

    DotNet基础 URL特殊字符转义 摘要: URL中一些字符的特殊含义,基本编码规则如下: 1.空格换成加号(+) 2.正斜杠(/)分隔目录和子目录 3.问号(?)分隔URL和查询 4.百分号(%) ...

  5. 在Struts.xml中的result元素指的是:指定动作类的动作方法执行完后的结果视图.

    result结果集 上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集 在Struts.xml中的result元素指的是:指定动作类的动作方法执 ...

  6. 26种提高ASP.NET网站访问性能的优化方法 .

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...

  7. 提高ASP.net性能的十种方法

    提高ASP.net性能的十种方法 2014-10-24  空城66  摘自 博客园  阅 67  转 1 转藏到我的图书馆   微信分享:   今天无意中看了一篇关于提高ASP.NET性能的文章,个人 ...

  8. 学习zepto.js(对象方法)[3]

    继续说zepto里attributes的相关操作. attr,removeAttr,prop这三个方法. attr(): 三种用途 get: 返回值为一个string字符串 $("<s ...

  9. 提高ASP.NET应用程序性能的十大方法

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...

随机推荐

  1. Structured Streaming教程(2) —— 常用输入与输出

    上篇了解了一些基本的Structured Streaming的概念,知道了Structured Streaming其实是一个无下界的无限递增的DataFrame.基于这个DataFrame,我们可以做 ...

  2. 基本数据类型、包装类、String之间的转换

    package 包装类; /** *8种基本数据类型对应一个类,此类即为包装类 * 基本数据类型.包装类.String之间的转换 * 1.基本数据类型转成包装类(装箱): * ->通过构造器 : ...

  3. java之静态方法与非静态方法

    1.静态方法最大的特点就是,不用生成类的实例对象,直接可以用. 2.它的语法格式:<类名|实例名>.<类变量名> 3.Java中的静态方法中,在方法声明时前面要加static ...

  4. (58)Wangdao.com第九天_JavaScript 对象的基本操作

    对象的基本操作 创建对象 var 对象名 = new Object();        // new 函数;    称为构造函数,专门用来创建对象的函数 var god =  给对象增加属性 删除对象 ...

  5. sqlite 一条记录判断一个字段是否like另一个字段

    sql: select * from test where col2 like '%'||col1||'%';

  6. ubuntu代替方案

    你在使用Ubuntu,可是希望桌面体验……来得更眩目一点.虽说你总是可以添加新的桌面背景,或者索性切换桌面,但是你还有这个选择:换成一种全然不同的发行版. 本文就介绍了五个极其出色的Ubuntu替代发 ...

  7. unity 打包编译记录

    1.放到Plugins目录下的贴图不会打包进去 2.放到Plugins目录下的dll会自动打包,代码也会打包 3.放在Resources目录下的资源会自动打包 4.放在StreamingAssets目 ...

  8. 机器学习数据集,主数据集不能通过,人脸数据集介绍,从r包中获取数据集,中国河流数据集

    机器学习数据集,主数据集不能通过,人脸数据集介绍,从r包中获取数据集,中国河流数据集   选自Microsoft www.tz365.Cn 作者:Lee Scott 机器之心编译 参与:李亚洲.吴攀. ...

  9. Asp.Net Core中Json序列化处理整理

    一.Asp.Net Core中的Json序列化处理使用的是Newtonsoft.Json,更多参考:C# Newtonsoft.Json JsonSerializerSettings配置序列化操作,C ...

  10. boost 线程安全队列

    threadnullmethodsprocessingobjectsignal // QueueImplementation.cpp : Defines the entry point for the ...