自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

全面總結(jié)ADO.NET DataReader使用技巧

開發(fā) 后端
這里究ADO.NET DataReader使用技巧做了總結(jié)和常見問題的解答,文章還對用 DataReader 檢索二進(jìn)制大對象 (BLOB) 應(yīng)該怎么做出了講解。

經(jīng)常上網(wǎng)收集資料,自己看多了也能總結(jié)出一些東西,在這里究一些使用ADO.NET DataReader 獲得***性能的技巧來說誰,同時還回答了一些關(guān)于使用ADO.NET DataReader的常見問題。

◆在訪問相關(guān) Command 的任何輸出參數(shù)之前,必須關(guān)閉 DataReader。
◆完成讀數(shù)據(jù)之后總是要關(guān)閉 DataReader。如果使用 Connection 只是用于返回 DataReader,那么關(guān)閉 DataReader 之后立刻關(guān)閉它。
另外一個顯式關(guān)閉 Connection 的方法是把 CommandBehavior.CloseConnection 傳遞給 ExecuteReader 方法,以確保相關(guān)的連接在關(guān)閉 ADO.NET DataReader 時被關(guān)閉。如果從一個方法返回DataReader,而且不能控制 DataReader 或相關(guān)連接的關(guān)閉,則這樣做特別有用。
◆不能在層之間遠(yuǎn)程訪問 DataReader。DataReader 是為已連接好的數(shù)據(jù)訪問設(shè)計的。
◆當(dāng)訪問列數(shù)據(jù)時,使用類型化訪問器,例如,GetString、GetInt32 等。這使您不用進(jìn)行將 GetValue 返回的 Object 強(qiáng)制轉(zhuǎn)換成特定類型所需的處理。
◆一個單一連接每次只能打開一個 DataReader。在 ADO 中,如果打開一個單一連接,并且請求兩個使用只進(jìn)、只讀游標(biāo)的記錄集,那么 ADO 會在游標(biāo)生存期內(nèi)隱式打開第二個、未池化的到數(shù)據(jù)存儲區(qū)的連接,然后再隱式關(guān)閉該連接。對于 ADO.NET,“秘密”完成的動作很少。如果想在相同的數(shù)據(jù)存儲區(qū)上同時打開兩個 DataReaders,就必須顯式創(chuàng)建兩個連接,每個 DataReader 一個。這是 ADO.NET 為池化連接的使用提供更多控制的一種方法。
◆ExecuteReader 調(diào)用。這將 DataReader 的默認(rèn)行為更改為僅在請求時將數(shù)據(jù)加載到內(nèi)存。注意,CommandBehavior.SequentialAccess 要求順序訪問返回的列。也就是說,一旦讀過返回的列,就不能再讀它的值了。
◆如果已經(jīng)完成讀取來自 DataReader 的數(shù)據(jù),但仍然有大量掛起的未讀結(jié)果,就在調(diào)用 DataReader 的 Close 之前先調(diào)用 Command 的 Cancel。調(diào)用 DataReader 的 Close 會導(dǎo)致在關(guān)閉游標(biāo)之前檢索掛起的結(jié)果并清空流。調(diào)用 Command 的 Cancel 會放棄服務(wù)器上的結(jié)果,這樣,DataReader 在關(guān)閉的時候就不必讀這些結(jié)果。如果要從 Command 返回輸出參數(shù),還要調(diào)用 Cancel 放棄它們。如果需要讀取任何輸出參數(shù),不要調(diào)用 Command 的 Cancel,只要調(diào)用 DataReader 的 Close 即可。
 

二進(jìn)制大對象 (BLOB)

用 DataReader 檢索二進(jìn)制大對象 (BLOB) 時,應(yīng)該把 CommandBehavior.SequentialAccess 傳遞給 ExecuteReader 方法調(diào)用。因為 DataReader 的默認(rèn)行為是每次 Read 都把整行加載到內(nèi)存,又因為 BLOB 值可能非常大,所以結(jié)果可能由于單個 BLOB 而使大量內(nèi)存被用光。SequentialAccess 將 DataReader 的行為設(shè)置為只加載請求的數(shù)據(jù)。然后還可以使用 GetBytes 或 GetChars 控制每次加載多少數(shù)據(jù)。

記住,使用 SequentialAccess 時,不能不按順序訪問 DataReader 返回的不同字段。也就是說,如果查詢返回三列,其中第三列是 BLOB,并且想訪問前兩列中的數(shù)據(jù),就必須在訪問 BLOB 數(shù)據(jù)之前先訪問***列的值,然后訪問第二列的值。這是因為現(xiàn)在數(shù)據(jù)是順序返回的,并且 DataReader 一旦讀過該數(shù)據(jù),該數(shù)據(jù)就不再可用。

【編輯推薦】

  1. 詳談Linq查詢結(jié)果分析的方法
  2. 簡簡單單學(xué)習(xí)Linq查詢語法
  3. 詳細(xì)闡述Linq插入數(shù)據(jù)的操作方法
  4. 淺析Linq插入數(shù)據(jù)的實現(xiàn)方法
  5. 簡單解決Linq多條件組合問題
責(zé)任編輯:田樹 來源: 博客
相關(guān)推薦

2009-11-04 12:45:33

ADO.NET Dat

2009-11-13 10:31:07

ADO.NET Dat

2009-11-04 16:55:16

ADO.NET Dat

2009-10-29 10:44:18

ADO.NET Dat

2009-12-22 16:35:11

ADO.NET控件

2009-10-29 10:34:31

ADO.NET使用技巧

2009-11-12 14:37:26

ADO.NET結(jié)構(gòu)

2009-11-13 09:24:17

2009-12-28 15:46:22

ADO.NET操作

2009-12-21 14:39:09

ADO.NET技巧

2009-11-12 12:39:16

ADO.NET Sta

2009-11-03 17:25:59

ADO.NET編程技巧

2009-11-13 10:53:54

ADO.NET Dat

2009-10-29 13:34:01

ADO.NET對象

2009-11-11 14:27:32

ADO.NET函數(shù)

2009-12-31 11:11:42

ADO.NET組件

2009-12-23 17:30:54

ADO.NET應(yīng)用程序

2009-12-28 15:11:36

ADO.NET專家

2009-12-21 13:19:34

ADO.NET組件

2009-12-22 09:50:23

ADO.NET學(xué)習(xí)
點贊
收藏

51CTO技術(shù)棧公眾號