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