從 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 開頭的方法要好
From:http://tw.wingwit.com/Article/program/net/201311/11376.html