掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
數(shù)據(jù)集并不直接和數(shù)據(jù)庫(kù)打交道,它和數(shù)據(jù)庫(kù)之間的相互作用是通過(guò).NET數(shù)據(jù)提供程序中的數(shù)據(jù)適配器(DataAdapter)對(duì)象來(lái)完成的。那么數(shù)據(jù)集是如何工作的呢?

一、應(yīng)用程序向服務(wù)器端發(fā)出請(qǐng)求,要求獲取數(shù)據(jù)。
二、服務(wù)器響應(yīng)的數(shù)據(jù)發(fā)送到數(shù)據(jù)集,通過(guò).NET數(shù)據(jù)集提供程序完成。
三、數(shù)據(jù)集將數(shù)據(jù)發(fā)送客戶端。
四、客戶端修改后存儲(chǔ)到數(shù)據(jù)集中。
五、數(shù)據(jù)集統(tǒng)一將修改后的數(shù)據(jù)保存到服務(wù)器中。
ADO.NET數(shù)據(jù)集DataSet的工作原理如圖所示:
首先,客戶端與數(shù)據(jù)庫(kù)服務(wù)器端建立連接。
然后,由客戶端應(yīng)用程序向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求。數(shù)據(jù)庫(kù)服務(wù)器接到數(shù)據(jù)請(qǐng)求后,經(jīng)檢索選擇出符合條件的數(shù)據(jù),發(fā)送給客戶端的數(shù)據(jù)集,這時(shí)連接可以斷開(kāi)。
接下來(lái),數(shù)據(jù)集以數(shù)據(jù)綁定控件或直接引用等形式將數(shù)據(jù)傳遞給客戶端應(yīng)用程序。如果客戶端應(yīng)用程序在運(yùn)行過(guò)程中有數(shù)據(jù)發(fā)生變化,它會(huì)修改數(shù)據(jù)集里的數(shù)據(jù)。
當(dāng)應(yīng)用程序運(yùn)行到某一階段時(shí),比如應(yīng)用程序需要保存數(shù)據(jù),就可以再次建立客戶端到數(shù)據(jù)庫(kù)服務(wù)器端的連接,將數(shù)據(jù)集里的被修改數(shù)據(jù)提交給服務(wù)器,最后再次斷開(kāi)連接。
把這種不需要實(shí)時(shí)連接數(shù)據(jù)庫(kù)的工作過(guò)程叫做面向非連接的數(shù)據(jù)訪問(wèn)。在DataSet對(duì)象中處理數(shù)據(jù)時(shí),客戶端應(yīng)用程序僅僅是在本地機(jī)器上的內(nèi)存中使用數(shù)據(jù)的副本。這緩解了數(shù)據(jù)庫(kù)服務(wù)器和網(wǎng)絡(luò)的壓力,因?yàn)橹挥性谑状潍@取數(shù)據(jù)和編輯完數(shù)據(jù)并將其回傳到數(shù)據(jù)庫(kù)時(shí),才能連接到數(shù)據(jù)庫(kù)服務(wù)器。
雖然這種面向非連接的數(shù)據(jù)結(jié)構(gòu)有優(yōu)點(diǎn),但還是存在問(wèn)題。當(dāng)處于斷開(kāi)環(huán)境時(shí),客戶端應(yīng)用程序并不知道其他客戶端應(yīng)用程序?qū)?shù)據(jù)庫(kù)中原數(shù)據(jù)所做的改動(dòng)。很有可能得到的是過(guò)時(shí)的信息。
【編輯推薦】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流