dataset常見問題

2021-09-05 16:42:17 字數 3730 閱讀 9320

本節主要介紹在使用dataset物件的時候常遇到的問題,以及在使用dataset時候的一些技巧性問題。

ado.net2.0提供了兩個用於檢索關係資料的物件:dataset和datareader。並且這兩個物件都可以將檢索的關係資料儲存在記憶體中。在軟體開發過程中經常用到這兩個控制項,由於這兩個控制項在使用和功能方面的相似,很多程式設計師錯誤地認為dataset和datareader是可以相互替代的。這種想法是錯誤的,在這一小節將會講到dataset控制項和datareader控制項的區別。

■與資料庫連線

datset 連線資料庫時是非面向連線的。把錶全部讀到sql中的緩衝池,並斷開於資料庫的連線。

datareader 連線資料庫時是面向連線的。讀表時,只能向前讀取,讀完資料後有使用者決定是否斷開連線。

■    處理資料速度

dataset讀取、處理速度較慢。

datareader讀取、處理速度較快。

■    更新資料庫

在對dataset資料集中的資料進行更新後,可以把資料更新回原來的資料庫。

在對datareader中的資料進行更新後,沒有辦法進行資料庫更新。  

■    支援分頁排序

在dataset中支援分頁、動態排序等操作。

在datareader中沒有分頁、動態排序的功能。

■     占用記憶體

dataset在 iis 伺服器上所使用的記憶體較多。

dataset在 iis 伺服器上所使用的記憶體較少。

綜上所述得出dataset和datareader有各自適用的場合。如果資料**控制項只是用來填入控制項的清單成為其選項,或者資料繫結控制項並不需要提供排序或分頁功能的話,則應該使用 datareader。反之,如果資料繫結控制項需要提供排序或分頁功能的話,則必須使用 dataset,通過dataset設定出來分頁排序等頁面面顯示效果。

在8.6.1節中講了使用dataset的readxml方法,把xml檔案檔案中的資料和架構讀取到dataset資料集中。在xml檔案檔案中的資料量不大,或者資料架構不複雜的情況下,使用這種方法讀取的速度很快,但是對於大檔案的讀取速度就會明顯的降下來,影響程式的執行。在這一小節中將講到如何提高dataset讀取xml檔案的效率。

方法很簡單,首先建立乙個dataset實體ds,接下來使用readxml方法讀取存在的xml檔案檔案,最後在載入資料後開啟通知和約束。**如下所示。

string infile;

//判斷xml檔案是否存在

if (file.exists(infile))   

//建立dataset物件,用來讀取xml檔案

dataset ds = new dataset();

using (stringreader sr = new stringreader(infile))

//ds讀取xml檔案資訊

ds.readxml(sr, xmlreadmode.ignoreschema);

//載入資料後開啟通知和約束

ds.tables[0].endloaddata();

在本小節中主要講使用sql命令語句的方式來返回資料集。使用sql命令語句把從資料庫中檢索出來的資訊儲存在dataset資料集中。例項**如下所示。

string sconnectionstring; //宣告乙個字串

//連線資料庫字串

sconnectionstring = " data source=.;initial catalog=xbmis;user id=sa; ";

//建立sqlconnection資料庫連線物件

sqlconnection conn = new sqlconnection(sconnectionstring);

//建立sqldataadapter物件adapter,conn是資料庫連線字串

sqldataadapter adapter = new sqldataadapter("select * from t_lunwzht", conn);

dataset ds = new dataset();

adapter.fill(ds);

//關閉資料庫連線函式

gridview3.datasource = ds.tables[0];

gridview3.databind();

執行效果

將上面**拷貝到頁面的後台**中,執行程式,顯示結果如圖8-31所示。

圖8-31 gridview中顯示dataset中的資料

在上一小節中主要講了使用sql語句返回dataset資料集的方式。在本小節中將介紹使用儲存過程實現返回資料集的方式。

存錯過程**如下:

alter procedure t_lunwzht

asselect zhuangtbh as 編號,zhuangtmc as 名稱 from t_lunwzht

儲存過程的名稱是:t_lunwzht。作用是:從t_lunwzht中查尋出來編號和名稱的資訊。

下面給出呼叫儲存過程t_lunwzht的**,如下所示。

string sconnectionstring; //宣告乙個字串

//連線資料庫字串

sconnectionstring = " data source=.;initial catalog=xbmis;user id=sa; ";

//建立sqlconnection資料庫連線物件

sqlconnection conn = new sqlconnection(sconnectionstring);

//建立sqldataadapter物件adapter,pro_ zhuangtai是儲存過程名

sqldataadapter adapter = new sqldataadapter();

adapter.selectcommand = new sqlcommand("pro_zhuangtai", conn);

adapter.selectcommand.commandtype = commandtype.storedprocedure;

//建立ds並填充資料集

dataset ds = new dataset();

adapter.fill(ds);

//關閉資料庫連線函式

gridview3.datasource = ds.tables[0];

gridview3.databind();

執行效果

將上面**拷貝到頁面的後台**中,執行程式,顯示結果如圖8-32所示。

圖8-32 gridview中顯示dataset中的資料

使用dataset的writexml()方法,可以將dataset中的資料和架構寫入到xml檔案檔案中儲存。通常在writexml()方法中使用的引數是string型別的,但是writexml()方法還有另外的一種引數型別stream型別。

兩種writexml()方法的完整寫法如下所示:

dataset.writexml(string filename)

dataset.writexml(stream filename)

這兩種方法的區別:

使用dataset.writexml(string filename)生成的xml檔案中包含xml 宣告,也就是包含xml檔案檔案的標頭檔案, 即<?xml version="1.0" standalone="yes"?>。

而使用dataset.writexml(stream filename) 生成的xml檔案檔案中卻不會寫入xml宣告。

常見問題 朗動常見問題

常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...

面試常見問題 1 this的常見問題

this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...

Spring常見問題

1 利用spring框架程式設計,console列印出log4j warn please initialize the log4j system properly?lupa開源社群 u i w.d t 說 明你的log4j.properties沒有配置。請把log4j.properties放到工程的...