ADO.NET DataReader對象方法
ADO.NET有很多值得學習的地方,這里我們主要介紹DataReader對象提供方法,可以讀取通過在數(shù)據(jù)源執(zhí)行命令獲得的結果集,并且是只讀的、只向前遞進的行數(shù)據(jù)流,包括介紹DataReader對象遍歷數(shù)據(jù)等方面。這個對象在讀取數(shù)據(jù)方面的性能最好。
#T#Command對象可以對數(shù)據(jù)源的數(shù)據(jù)直接操作,但是如果執(zhí)行的是要求返回數(shù)據(jù)結果集的查詢命令或存儲過程,需要先獲取數(shù)據(jù)結果集的內(nèi)容,然后再進行處理或輸出,這就需要DataReader對象來配合。DataReader對象提供一個只讀的、單向的游標,用于訪問結果集的行數(shù)據(jù)。因為內(nèi)存中每次僅有一個數(shù)據(jù)行,所以DataReader對象需要的開銷很小,效率很高。這里還得提一下Command對象對數(shù)據(jù)源的數(shù)據(jù)直接操作而不要求返回數(shù)據(jù)結果集的情況,這時就不需要使用ADO.NET DataReader對象,而是使用ExecuteNonQuery()方法完成對數(shù)據(jù)源數(shù)據(jù)的直接操作。

客戶端應用程序要向數(shù)據(jù)庫中插入學生數(shù)據(jù)信息。將數(shù)據(jù)值寫在SQL命令中或者傳遞給存儲過程的參數(shù),然后調(diào)用Command對象的ExecuteNonQuery()方法,學生數(shù)據(jù)就插入到數(shù)據(jù)庫了ExecuteNonQuery()方法可以返回受影響的行數(shù),如果插入一個學生記錄成功了,返回的行數(shù)就應該是1,不成功就返回-1。通過返回的受影響行數(shù),可以判斷是否成功。這個應用程序就沒有使用DataReader對象。
ADO.NET DataReader對象不能直接使用構造函數(shù)實例化。必須通過Command對象的ExecuteReader()方法來生成。DataReader對象最主要的方法是Read()方法,用來檢索行,然后用下標來訪問行中的字段。在DataReader對象遍歷數(shù)據(jù)記錄時,數(shù)據(jù)連接必須保持打開狀態(tài),知道DataReader對象被關閉。
客戶端應用程序需要數(shù)據(jù)源提供數(shù)據(jù)時,發(fā)送查詢命令到數(shù)據(jù)源。由數(shù)據(jù)源進行查詢處理,返回給客戶端一個只讀、只進的記錄集。對這個記錄集的操作就是利用DataReader對象只讀和只進訪問方式進行的。每讀一個數(shù)據(jù)就向下一條記錄轉移,直至記錄集末尾,并且得到的數(shù)據(jù)是只讀的,不能修改。整個獲取數(shù)據(jù)過程需要客戶端應用程序與數(shù)據(jù)源之間保持永久連接。.NET提供程序及其ADO.NET DataReader類,請參見表:
提供程序 |
DataReader類 |
SQL數(shù)據(jù)提供程序 |
SqlDataReader |
OLE DB數(shù)據(jù)提供程序 |
OleDbDataReader |
Oracle數(shù)據(jù)提供程序 |
OracleDataReader |
ODBC數(shù)據(jù)提供程序 |
OdbcDataReader |