DataReader物件與資料獲取

2022-03-02 21:58:09 字數 3218 閱讀 2507

datareader物件與資料獲取

datareader物件以「基於連線」的方式來訪問資料庫。也就是說,在訪問資料庫、執行sql操作時,datareader要求一直連在資料庫上。這將會給資料庫的連線負載帶來一定的壓力,但datareader物件的工作方式將在很大程度上減輕這種壓力。

1、datareader物件的常用屬性

datareader物件提供了用順序的、唯讀的方式讀取用command物件獲得的資料結果集。由於datareader只執行讀操作,並且每次只在記憶體緩衝區裡儲存結果集中的一條資料,所以使用datareader物件的效率比較高,如果要查詢大量資料,同時不需要隨機訪問和修改資料,datareader是優先的選擇。

datareader物件有以下常用屬性。

fieldcount屬性:該屬性用來表示由datareader得到的一行資料中的字段數。

hasrows屬性:該屬性用來表示datareader是否包含資料。

isclosed屬性:該屬性用來表示datareader物件是否關閉。

2、datareader物件的常用方法

同樣,在sql server data provider裡的datareader物件叫sqldatareader,而在ole db data

provider裡叫oledbdatareader。

datareader物件使用指標的方式來管理所連線的結果集,它的常用方法有關閉方法、讀取記錄集下一條記錄和讀取下乙個記錄集的方法、讀取記錄集中欄位和記錄的方法,以及判斷記錄集是為空的方法。

1. close方法

close方法不帶引數,無返回值,用來關閉datareader物件。由於datareader在執行sql命令時一直要保持同資料庫的連線,所以在datareader物件開啟的狀態下,該物件所對應的connection連線物件不能用來執行其他的操作。所以,在使用完datareader物件時,一定要使用close方法關閉該datareader物件,否則不僅會影響到資料庫連線的效率,更會阻止其他物件使用connection連線物件來訪問資料庫。

2. bool read()方法

bool

read()方法會讓記錄指標指向本結果集中的下一條記錄,返回值是true或false。當command的executereader方法返回datareader物件後,須用read方法來獲得第一條記錄;當讀好一條記錄想獲得下一下記錄時,也可以用read方法。如果當前記錄已經是最後一條,呼叫read方法將返回false。也就是說,只要該方法返回true,則可以訪問當前記錄所包含的字段。

3. bool nextresult()方法

bool nextresult()方法會讓記錄指標指向下乙個結果集。當呼叫該方法獲得下乙個結果集後,依然要用read方法來開始訪問該結果集。

4. object getvalue(int i)方法

object getvalue(int

i)方法根據傳入的列的索引值,返回當前記錄行裡指定列的值。由於事先無法預知返回列的資料型別,所以該方法使用object型別來接收返回資料。

5. int getvalues (object values)方法

int getvalues (object

values)方法會把當前記錄行裡所有的資料儲存到乙個陣列裡並返回。可以使用fieldcount屬性來獲知記錄裡字段的總數,據此定義接收返回值的陣列長度。

6. 獲得指定欄位的方法

獲得指定欄位的方法有getstring、getchar、getint32等,這些方法都帶有乙個表示列索引的引數,返回均是object型別。使用者可以根據欄位的型別,通過輸入列索引,分別呼叫上述方法,獲得指定列的值。

例如,在資料庫裡,id的列索引是0,通過

string id = getstring (0);

**可以獲得id的值。

7. 返回列的資料型別和列名的方法

可以呼叫getdatatypename()方法,通過輸入列索引,獲得該列的型別。這個方法的定義是:

string getdatatypename (int i)

可以呼叫getname()方法,通過輸入列索引,獲得該列的名稱。這個方法的定義是:

string getname (int i)

綜合使用上述兩方法,可以獲得資料表裡列名和列的字段。

8. bool isdbnull(int i)方法:

bool isdbnull(int i)方法的引數用來指定列的索引號,該方法用來判斷指定索引號的列的值是否為空,返回true或false。

3、datareader物件訪問資料庫**示例

下面的**將說明如何利用datareader物件獲得並訪問結果集。

//連線字串

private static string strconnect = "data source=localhost;

論uid=sa;pwd=aspnet;database=logindb"

sqlconnection objconnection = new sqlconnection(strconnect);

sqlcommand objcommand = new sqlcommand("", objconnection);

// 設定查詢類的sql語句  

objcommand.commandtext =  "select * from users ";

try// 獲取執行結果

sqldatareader result = objcommand.executereader();

//如果dataread物件成功獲得資料,返回true,否則返回false

if (result.read() == true)

}catch(sqlexception e)

finally

// 關閉dataread物件

if(result.isclosed == false)

}在**裡,給出了兩種使用datareader物件訪問結果集的方式,一種是直接根據欄位名,利用result["userid"]的形式獲得特定欄位的值;另一種方式寫在注釋裡,通過for迴圈,利用fieldcount屬性和getvalue方法,依次訪問資料集的字段。

datareader

提供未緩衝的資料流,該資料流使過程邏輯可以有效地按順序處理從資料來源中返回的結果。由於資料不在記憶體中快取,所以在檢索大量資料時,datareader

是一種適合的選擇。另外值得注意的是,datareader在讀取資料時,限制每次只能讀一條,這樣無疑提高了讀取效率,一般適用於返回結果只有一條資料的情況。如果返回的是多條記錄,就要慎用此物件。

使用DataReader物件檢索資料例項

我們再來重新完成學生資訊窗體功能,不同的是前面採用的是dateset和dataadapter來完成的。現在我們使用datareader物件來檢索資料。using system using system.collections.generic using system.componentmodel u...

用DataReader讀取資料

與前面學習的資料提供程式中的其他元件不同,datareader物件不能直接例項化,需要呼叫command物件的executereader 方法的返回值。使用datareader物件讀取資料的步驟如下 1 建立資料庫鏈結connection物件,可以選sqlconnection或者oledbconne...

使用datareader檢索資料

code sqldatareader reader command.executereader 以下 示例迴圈訪問乙個 datareader 物件,並從每個行中返回兩個列。code if reader.hasrows while reader.read console.writeline t t r...