對於Windows應用程序
我的建議正好相反
台式應用程序很適合應用斷開的編程模式(DataSet和其它ADO
NET對象使這種模式變得更簡單了)
當然
這並不意味著
你可以在客戶端無憂無慮地下載成千上萬的記錄
盡管你可以將ADO
NET對象用於任何種類的
NET應用程序
但如何使用它們是隨具體情況的不同而不同的
訪問多個結果集
根據查詢的語法你可以返回多個結果集缺省情況下data reader是位於第一個結果集上的你可以用Read方法在當前結果集中滾動查看記錄在找到最後一個記錄時Read方法返回false不再繼續讀取你應該用NextResult方法轉移到下一個結果集如果沒有更多的需要讀的結果集了那麼該方法返回false下面的代碼說明了如何在所有返回的結果集中訪問所有的記錄
Dim reader As SqlDataReader
cmd
Connection
Open()
reader = cmd
ExecuteReader()
Do
@# Move through the first resultset
While reader
Read()
@# access the row
End While
Loop While reader
NextResult()
reader
Close()
cmd
Connection
Close()
當你讀一個行的內容時可以通過索引或名稱來識別列運用索引可以更快因為提供者可以直接進入到緩沖器中如果你指定列名提供者就用GetOrdinal方法將名稱轉換成相應的索引然後執行基於索引的訪問注意對於SQL Server data reader來說所有的GetXXX方法實際上都調用了相應的GetSqlXXX方法對於Oracle data reader來說情況是類似的本地數據總是被寫進NET Framework類型中OracleDataReader類為它自己的內部類型提供了一組私有的GetXXX方法這些方法包括GetOracleBFileGetOracleBinary和GetOracleDateTime等相反OLE DB和ODBC readers只有單獨的一組get方法
NET Framework 版通過添加方法HasRows擴展了data readers的編程接口該方法返回一個Boolean值來說明是否有很多行需要讀(這是ASPNET 的一個不足之處)然而該方法並沒有告訴我們有效的行的數量同樣也沒有方法或技巧使我們提前知道已經返回了多少結果集
在Oracle數據庫編程中一個查詢或一個存儲過程返回的多個結果集是通過多個REF CURSOR對象處理的有多少結果集你就必須將多少輸出參數同命令關聯起來以便NextResult方法可以用於Oracle數據庫在命令文本中一個ADONET結果集同一個Oracle REF CURSOR是一致的輸出參數名必須與指針名匹配它們的類型必須是OracleTypeCursor例如如果要運行的存儲過程(或命令文本)引用了兩個指針(Employees和Orders)那麼下面的代碼就說明了如何進行設置以返回兩個結果集
Dim p
As OracleParameter
p
= cmd
Parameters
Add(
Employees
OracleType
Cursor)
p
Direction = ParameterDirection
Output
Dim p
As OracleParameter
p
= cmd
Parameters
Add(
Orders
OracleType
Cursor)
p
Direction = ParameterDirection
Output
在上面的代碼中cmd是一個OracleCommand對象它指向一個命令或一個存儲過程它執行代碼創建了兩個REF CURSOR稱為Employees和OrdersREF CURSOR的名稱和ADONET輸出參數的名稱必須匹配
ADONET對象模式包含兩個主要的部分——托管提供者和databaseagnostic的容器類如DataSet托管提供者是數據源連接器的新類型它們代替了基於COM的OLE DB提供者到我寫這篇文章時為止只有少數幾個托管提供者來連接商業DBMSNET Framework 版只包含幾個本地提供者——用於SQL ServerOracle和所有OLE DB的提供者和ODBC驅動程序第三方的供應商也支持MySQL並為Oracle提供了可供選擇的提供者
ADONET看起來類似於ADO而且托管提供者在結構上同OLE DB提供者也是可以相比的除了這些相似點外在ADONET中進行有效的編程還需要一套新的技巧和好的方法在大多數情況下你可以通過編寫代碼得到很多技巧並積累對象模式方面的經驗當你在進一步研究ADONET編程時記住我在本文中所講的這個ADONET技巧吧
[] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/15155.html