ADO.NET简介
微軟數(shù)據(jù)訪問方式歷史階段
1,ODBC (Open Database Connectivity)是第一個(gè)使用SQL訪問不同關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問技術(shù)。使用ODBC應(yīng)用程序能夠通過單一的命令操縱不同的數(shù)據(jù)庫(kù),而開發(fā)人員需要租的僅僅只是針對(duì)不同的應(yīng)用加入相應(yīng)的OBDC驅(qū)動(dòng)
2,DAO(Data Access Objects)不像OBDC那樣是面向C/C++程序員的,他是微軟提供給Visual Basic開發(fā)人員的一種簡(jiǎn)單的數(shù)據(jù)訪問方法,用于操控Access數(shù)據(jù)庫(kù)
3,RDO(Remote Data Objects)在使用DAO訪問不同的關(guān)系型數(shù)據(jù)庫(kù)的時(shí)候,jet引擎不得不在DAO和ODBC之間進(jìn)行命令的轉(zhuǎn)化,導(dǎo)致了性能的下降,而RDO的出現(xiàn)就順利成章了
4,OLE DB(Object Link and embed)隨著越來(lái)越多的數(shù)據(jù)以非關(guān)系型格式存儲(chǔ),需要一種型的架構(gòu)來(lái)提供這種應(yīng)用和數(shù)據(jù)源之間的無(wú)縫連接,基于COM(Component Object Model)的OLE DB應(yīng)運(yùn)而生了
5,ADO基于OLE DB之上的ADO更簡(jiǎn)單,更高級(jí),更合適C#程序員,同時(shí)消除了OLE DB的多種弊端,取而代之是微軟技術(shù)的發(fā)展趨勢(shì)
ADO.NET簡(jiǎn)介
ADO.NET的名稱起源于ADO(ActiveX Data Objects)是一個(gè)COM組件庫(kù),也就是一個(gè)通用框架類庫(kù),該類庫(kù)鍵跨域所有存在的WindowsAPI函數(shù),簡(jiǎn)單來(lái)說(shuō)罵他是在.NET編程環(huán)境中使用的數(shù)據(jù)訪問接口
ADO.NET 是與C#和.NET Framework一起使用的類集的名稱,用于以關(guān)系型的,面向表的格式訪問數(shù)據(jù)
ADO.NET被集成到.NET Framework中,可以用于任何.NET語(yǔ)言,尤其是C#語(yǔ)言
ADO.NET有兩部分構(gòu)成:
1,數(shù)據(jù)提供程序(Provider):它能和數(shù)據(jù)庫(kù)保持鏈接并且執(zhí)行SQL命令,操縱數(shù)據(jù)集。
2,數(shù)據(jù)集(DataSet):能與數(shù)據(jù)庫(kù)在斷開鏈接的情況下進(jìn)行數(shù)據(jù)庫(kù)的操作
ADO.NET技術(shù)中的五大對(duì)象
Connection Command DataReader DataAdapter DataSet
Connection 類
和數(shù)據(jù)庫(kù)交互,必須連接它。連接幫助指明數(shù)據(jù)庫(kù)服務(wù)器、數(shù)據(jù)庫(kù)名字、用戶名、密碼,和連接數(shù)據(jù)庫(kù)所需要的其它參數(shù)。Connection對(duì)象會(huì)被Command對(duì)象使用,這樣就能夠知道是在哪個(gè)數(shù)據(jù)源上面執(zhí)行命令。
與數(shù)據(jù)庫(kù)交互的過程意味著必須指明想要執(zhí)行的操作。這是依靠Command對(duì)象執(zhí)行的。開發(fā)人員使用Command對(duì)象來(lái)發(fā)送SQL語(yǔ)句給數(shù)據(jù)庫(kù)。Command對(duì)象使用Connection對(duì)象來(lái)指出與哪個(gè)數(shù)據(jù)源進(jìn)行連接。開發(fā)人員能夠單獨(dú)使用Command對(duì)象來(lái)直接執(zhí)行命令,或者將一個(gè)Command對(duì)象的引用傳遞給DataAdapter,它保存了一組能夠操作下面描述的一組數(shù)據(jù)的命令。
Command對(duì)象
成功與數(shù)據(jù)建立連接后,就可以用Command對(duì)象來(lái)執(zhí)行查詢、修改、插入、刪除等命令;Command對(duì)象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入數(shù)據(jù)可用ExecuteNonQuery()方法來(lái)執(zhí)行插入命令。
DataReader類
許多數(shù)據(jù)操作要求開發(fā)人員只是讀取一串?dāng)?shù)據(jù)。DataReader對(duì)象允許開發(fā)人員獲得從Command對(duì)象的SELECT語(yǔ)句得到的結(jié)果。考慮性能的因素,從DataReader返回的數(shù)據(jù)都是快速的且只是“向前”的數(shù)據(jù)流。這意味著開發(fā)人員只能按照一定的順序從數(shù)據(jù)流中取出數(shù)據(jù)。這對(duì)于速度來(lái)說(shuō)是有好處的,但是如果開發(fā)人員需要操作數(shù)據(jù),更好的辦法是使用DataSet。
DataSet對(duì)象
DataSet對(duì)象是數(shù)據(jù)在內(nèi)存中的表示形式。它包括多個(gè)DataTable對(duì)象,而DataTable包含列和行,就象一個(gè)普通的數(shù)據(jù)庫(kù)中的表。開發(fā)人員甚至能夠定義表之間的關(guān)系來(lái)創(chuàng)建主從關(guān)系(parent-child relationships)。DataSet是在特定的場(chǎng)景下使用――幫助管理內(nèi)存中的數(shù)據(jù)并支持對(duì)數(shù)據(jù)的斷開操作的。DataSet是被所有Data Providers使用的對(duì)象,因此它并不像Data Provider一樣需要特別的前綴
DataAdapter類
某些時(shí)候開發(fā)人員使用的數(shù)據(jù)主要是只讀的,并且開發(fā)人員很少需要將其改變至底層的數(shù)據(jù)源。同樣一些情況要求在內(nèi)存中緩存數(shù)據(jù),以此來(lái)減少并不改變的數(shù)據(jù)被數(shù)據(jù)庫(kù)調(diào)用的次數(shù)。DataAdapter通過斷開模型來(lái)幫助開發(fā)人員方便的完成對(duì)以上情況的處理。當(dāng)在一單批次的對(duì)數(shù)據(jù)庫(kù)的讀寫操作的持續(xù)的改變返回至數(shù)據(jù)庫(kù)的時(shí)候,DataAdapter 填充(fill)DataSet對(duì)象。DataAadapter包含對(duì)連接對(duì)象以及當(dāng)對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀取或者寫入的時(shí)候自動(dòng)的打開或者關(guān)閉連接的引用。另外,DataAdapter包含對(duì)數(shù)據(jù)的SELECT、INSERT、UPDATE和DELETE操作的Command對(duì)象引用。開發(fā)人員將為DataSet中的每一個(gè)Table都定義DataAadapter,它將為開發(fā)人員照顧所有與數(shù)據(jù)庫(kù)的連接。所以開發(fā)人員將做的工作是告訴DataAdapter什么時(shí)候裝載或者寫入到數(shù)據(jù)庫(kù)
DataTable類
DataTable 是一個(gè)數(shù)據(jù)網(wǎng)格控件。它可以被應(yīng)用在 VB 和 ASP 上。它無(wú)須代碼就可以簡(jiǎn)單的綁定數(shù)據(jù)庫(kù)。它具有微軟風(fēng)格的用戶界面。
DataTable的實(shí)例化以及添加列:
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
DataRow dr = dt.NewRow();
object[] objs = { 1, "Name" };
dr.ItemArray = objs;
dt.Rows.Add(dr);
this.dataGridView1.DataSource = dt;
(一個(gè)舉例)
數(shù)據(jù)庫(kù)比作水源,存儲(chǔ)了大量的水(數(shù)據(jù)); Connection: 好比深入水中進(jìn)水口,保持與水的接觸,只有它與水進(jìn)行“鏈接”,其他對(duì)象才可以抽到水(訪問到數(shù)據(jù)) Command: 則像抽水機(jī),為抽水提供動(dòng)力和執(zhí)行方法,然后把水返給上面的”水管“ DataAdpter、DataReader: 就像輸水管,擔(dān)任著水的傳輸任務(wù),并起著橋梁的作用。 DataAdapter 是通過發(fā)動(dòng)機(jī)把水運(yùn)輸?shù)剿畮?kù)里面保持 DataReader 單向地直接把水送到需要水的用戶那里,所以要比水庫(kù)中轉(zhuǎn)一下速度更快, DataSet: 則是一個(gè)大水箱,把抽上來(lái)的水按著一定關(guān)系的池子進(jìn)行存放,即使撤掉“抽水裝置”(斷開鏈接,離線狀態(tài))也可以保持“水”的存在。這也正是ADO.NET的核心 DataTable: 則像是水庫(kù)中的每個(gè)獨(dú)立的水池子,分別存放不同種類的水,一個(gè)大水庫(kù)由多個(gè)這樣的水池子組成總結(jié)
- 上一篇: 线性规划(一):基本概念
- 下一篇: asp.net ajax控件工具集 Au