徐祥濤
摘要:ADO.NET是基于.NET平臺下的數據庫訪問技術,本文闡述了ADO.NET的功能、結構和對象模型,給出了基于C#.NET的ADO.NET技術訪問數據庫的具體實現過程,并給出了部分實現代碼。
關鍵詞:ADO.NET; 數據集; 數據提供程序
1 引言
數據庫訪問技術一直是數據庫應用系統開發中的難點和重點,也是每個數據庫軟件開發者必須要考慮的環節。ADO.NET微軟最新的數據訪問技術,是數據庫應用程序和數據源間溝通的橋梁,主要提供一個面向對象的數據存取架構,用來開發數據庫應用程序。
2 ADO.NET概述
ADO.NET是.NET Framework提供的一系列類,提供了對關系數據、XML和應用程序數據的訪問,是.NET Framework 中最重要的組成部分。
2.1 ADO.NET的功能
ADO.NET是連接系統前、后端的關鍵。在典型的數據庫應用體系結構中,用戶和數據庫系統的交互過程是:首先,用戶通過用戶界面向系統發出數據操作的請求,用戶界面接收請求后傳到ADO.NET;然后,ADO.NET分析用戶請求,并通過數據庫訪問接口于數據源交互,向數據源發送SQL指令,并從數據源獲取數據;最后,ADO.NET將數據訪問結果傳回用戶界面。
2.2 ADO.NET的基本結構
ADO.NET將其組件區分為:"數據存取"與"數據操作"兩大類,負責完成這些處理的兩大中心組件是:數據集(DateSet)和數據提供程序(Data Providers)。數據集代表了實際的數據而數據提供程序就是用來連接數據庫、執行命令和提取結果的。數據提供程序有兩種:一種是SQL Server數據提供程序;另一種是一般的數據提供程序,它可以與任何一個OLEDB數據源通信。數據提供程序包含下列組件專門負責數據操作并且能夠以快速、順序和只讀方式來存取數據:Connection、Command、DataReader和DataAdapter。
3 使用ADO.NET訪問數據庫
對數據庫進行操作,首先是與數據庫建立連接,其次發出SQL命令或存儲過程進行相應操作,之后由數據集返回所需的數據記錄,最后將修改后的結果返回到數據庫。
3.1 連接數據庫
要使用ADO.NET從數據庫發送和檢索數據,必須首先創建對數據庫的連接。連接是客戶應用程序和ADO.NET之間的管道,在ADO.NET的兩種工作模式(連接模式和非連接模式)中都使用。ADO.NET提供了兩個類來創建連接,第一個是通用的OleDbConnection類,它創建處理不同的數據庫類型的連接。第二個是SqlConnection類,它創建的連接只處理只處理SQL Server數據庫,并優化了性能。
本文以連接SQL Server數據庫為例,首先建立一個名為SCN的SqlConnection對象,再使用ConnectionString屬性來設置要連接的數據庫種類和所在的位置,最后用Open方法來打開數據庫,如下所示:
SqlConnection SCN = new SqlConnection();
SCN. ConnectionString =
"Persist Security Info=False;User id=sa;pwd=frock;database=Student;server=(local)";
SCN.Open();
3.2 操作數據庫
創建了數據庫連接之后,下一步就是通過連接發送請求來選擇數據。對數據庫執行命令操作,如進行數據的查詢、修改、添加、刪除等,實際上就是傳送SQL指令,SQL指令封裝在Command對象中。操縱數據庫可以通過多種方式來實現,常用的對象是SqlCommand對象(表示一個SQL操作或者一個存儲過程)和SqlDataAdpater對象(把一個SqlCommand提交給SQL Server數據庫)。
本文以SqlCommand對象為例,其過程為:先定義一個SqlCommand對象,再通過設置它的CommandText屬性來指定對數據庫進行的操作(SQL語句可以是查詢、添加、修改和刪除等),然后指明SqlCommand對象所用到的SqlConnection對象。
SqlCommand SCM = new SqlCommand();
SCM.CommandText = "select * from tdbStudent";
SCM.Connection = SCN;
還有一種更簡便的方法如下:
SqlCommand SCM = new SqlCommand("select * from tdbStudent", SCN);
根據不同的操作目的選擇執行命令的方式,SqlCommand 特別提供了以下對 SQL Server 數據庫執行命令的方法。
3.3 獲取數據集
ADO.NET 支持面向流的數據訪問(如DataReader 對象)和基于集的數據訪問(如DataSet 對象)。
3.3.1 面向流的數據訪問
可以從數據庫中順向逐條從數據庫中讀取由SELECT 命令返回的只讀數據流,而且當前內存中每次只存一條記錄。DataReader對象的讀取數據方式是先通過Connection 對象和數據庫聯機,再通過Command 對象的ExecuteReader 方法執行SQLSELECT 命令獲取查詢的數據, 再通過DataReader 對象的屬性和方法,將獲取的數據以只讀方式從當前的數據記錄順向逐條處理,最后將數據放入內存或直接顯示在窗體上。但是要注意在DataReader 開啟時, 必須和數據庫一直保持聯機, 此時Connection 只提供給DataReader 使用, 必須等到DataReader 關閉后, 才允許執行其他Connection 命令。DataReader 適用于只需返回一個簡單的只讀記錄集的情況。DataReader 最主要的方法是Read, 用于從查詢結果中獲取數據行。DataReader 每執行一次Read()方法, 就返回一個Bool 值, 說明是否有數據可讀, 并且所檢索的數據向下走一行。
SqlDataReader SDR;
SDR = CM.ExecuteReader();
this.lstUser.Items.Clear();
while (DR.Read())
this.lstUser.Items.Add(DR[0].ToString());
3.3.2 面向集的數據訪問
數據適配器, 包含將數據從數據庫中取出的方法, 和將數據寫回數據庫的方法, 是數據庫和DataSet 之間溝通的橋梁。DataAdapter 對象使用Command 對象執行SQL 命令, 將從數據庫獲取的數據送到DataSet, 此時便可使用DataTable 對象來存取數據表, 將DataSet里面的數據經過處理后再送回數據庫。
SqlDataAdapter SDAP = new SqlDataAdapter();
SDA.SelectCommand = selectCMD;
DataSet DS = new DataSet();//4 填充DataSet
SDAP.Fill(DS, "student");
Page.Response.Write("
| " + DS.Tables[0].Rows[i].ItemArray[j] + " | ");
4小結
ADO.NET是與數據源交互的.NET技術。有許多的Data Providers,它將允許與不同的數據源交流——取決于它們所使用的協議或者數據庫。然而無論使用什么樣的Data Provider,你將使用相似的對象與數據源進行交互。
參考文獻
[1] 劉乃麗.ASP.NET 2.0 網絡開發詳解[M].北京:電子工業出版社.2008.
[2] 茅健.Visual Basic.NET+SQL Server全程指南[M].北京:電子工業出版社.2008.
[3] Michael Ekedahl著,馬海軍,楊繼萍等譯. Visual Basic.NET程序設計高級教程[M].北京:清華大學出版社.2005.