从 ADONET x 开始DataReader 就可以在单一次的查询动作中「批次 (batch)」读取 TSQL 语句以取回多个 table (数据表) 的数据也就是一次能够回传多个「结果集 (Result Set)」亦即所谓的「批次查询」其中 DataReader 的 NextResult 方法是用来取得批次查询中下一个 Result Set 的结果例如若要从两个不同的 table 中捞取 column 值分别绑定至两个 DropDownList 中我们不需要浪费系统资源去建立两个 DataSource 对象而可以直接用下列的 Codebehind 代码仅透过单一次的数据库连结来达成 using (SqlConnection conn = new SqlConnection(strConnString)) { connOpen(); using (SqlCommand cmd = new SqlCommand()) { cmdConnection = conn; // 利用分号「;」串连多句 SQL 语句之后再一次丢进数据库去执行达成「批次」读取或更新 // 数据库的目的此技巧亦适用于 INSERTUPDATEDELETE 的「批次」执行 cmdCommandText = SELECT 字段字段 FROM 数据表 ; SELECT * FROM 数据表; using (SqlDataReader dr = cmdExecuteReader()) { while(drRead()) { thisDropDownListItemsAdd(drGetSqlString()ToString() + drGetSqlInt()ToString()); } drNextResult(); while(drRead()) { thisDropDownListItemsAdd(drGetString() + drGetInt()); } } } } 读取时若还有其它的 Result Set则 NextResult 方法会返回 True因此我们也可透过返回的布尔值搭配 While 或 Do Until 等循环依序再往下读取 Result Set根据默认DataReader 会由第一个 Result Set 开始读取此外若连结的为 SQL Server 数据库从 ADONET x 开始DataReader 即支持以 GetSql 开头的方法来取得数据其「性能 (performance)」会比Get 开头的方法要好 |