本節主要介紹在使用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放到工程的...