ASP.NET資料庫編程
最後更新:2017-02-28
來源:互聯網
上載者:User
asp.net|編程|資料|資料庫 ASP.NET中的ADO.NET和ASP中的ADO相對應,它是ADO的改進版本。在ADO.NET中,通過Managed Provider所提供的API(API),可以輕鬆地訪問各種資料來源的資料,包括OLEDB所支援的和ODBC支援的資料庫。
下面介紹ADO.NET中最重要的兩個概念:Managed Provider和DataSet。
Managed Provider
過去,通過ADO的資料存取採用了兩層的基於串連的編程模型。隨著多層應用的需求不斷增加,程式員需要一個不需連線的模型。ADO.NET就應運而生了。ADO.NET的Managed Provider就是一個多層結構的不需連線的一致的編程模型。
Managed Provider提供了DataSet和資料中心(如MS SQL)之間的聯絡。Managed Provider包含了存取資料中心(資料庫)的一系列介面。主要有三個組件:
1、連線物件Connection、命令對象Command、參數對象Parameter提供了資料來源和DataSet之間的介面。DataSetCommand介面定義了資料列和表映射,並最終取回一個DataSet。
2、資料流提供了高效能的、前向的資料存取機制。通過IdataReader,你可以輕鬆而高效地訪問資料流。
3、更底層的對象允許你串連到資料庫,然後執行資料庫系統一級的特定命令。
過去,資料處理主要依賴於兩層結構,並且是基於串連的。串連斷開,資料就不能再存取。現在,資料處理被延伸到三層以上的結構,相應地,程式員需要切換到不需連線的應用程式模型。這樣,DataSetCommand就在ADO.NET中扮演了極其重要的角色。它可以取回一個DataSet,並維護一個資料來源和DataSet之間的"橋",以便於資料訪問和修改、儲存。DataSetCommand自動將資料的各種操作變換到資料來源相關的合適的SQL語句。從圖上可以看出,四個Command對象:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand分別代替了資料庫的查詢、插入、更新、刪除操作。
Managed Provider利用本地的OLEDB通過COM Interop來實現資料存取。OLEDB支援自動的和手動的交易處理。所以,Managed Provider也提供了交易處理的能力。
DataSet
DataSet是ADO.NET的中心概念。你可以把DataSet想象成記憶體中的資料庫。正是由於DataSet,才使得程式員在編程式時可以屏蔽資料庫之間的差異,從而獲得一致的編程模型。
DataSet支援多表、表間關係、資料約束等等。這些和關聯式資料庫的模型基本一致。
通過ADO.NET訪問資料庫
不論從文法來看,還是從風格和設計目標來看,ADO.NET都和ADO有顯著的不同。在ASP中通過ADO訪問資料庫,一般要通過以下四個步驟:
1、 建立一個到資料庫的鏈路,即ADO.Connection;
2、 查詢一個資料集合,即執行SQL,產生一個Recordset;
3、 對資料集合進行需要的操作;
4、 關閉資料鏈路。
在ADO.NET裡,這些步驟有很大的變化。ADO.NET的最重要概念之一是DataSet。DataSet是不依賴於資料庫的獨立資料集合。所謂獨立,就是:即使斷開資料鏈路,或者關閉資料庫,DataSet依然是可用的。如果你在ASP裡面使用過非串連記錄集合(Connectionless Recordset),那麼DataSet就是這種技術的最徹底的替代品。
有了DataSet,那麼,ADO.NET訪問資料庫的步驟就相應地改變了:
1、建立一個資料庫鏈路;
2、請求一個記錄集合;
3、把記錄集合暫存到DataSet;
4、如果需要,返回第2步;(DataSet可以容納多個資料集合)
5、關閉資料庫鏈路;
6、在DataSet上作所需要的操作。
DataSet在內部是用XML來描述資料的。由於XML是一種平台無關、語言無關的資料描述語言 (Data Description Language),而且可以描述複雜資料關係的資料,比如父子關係的資料,所以DataSet實際上可以容納具有複雜關係的資料,而且不再依賴於資料庫鏈路。
ADO.NET有許多個物件,我們先看看最基本的也最常用的幾個。首先看看ADOConnection。和ADO的ADODB.Connection對象相對應,ADOConnection維護一個到資料庫的鏈路。為了使用ADO.NET對象,我們需要引入兩個NameSpace:System.Data和System.Data.ADO,使用ASP.NET的Import指令就可以了:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
和ADO的Connection對象類似,ADOConnection對象也有Open和Close兩個方法。下面的這個例子展示了如何串連到本地的MS SQL Server上的Pubs資料庫。
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<%
'設定串連串...
Dim strConnString as String
strConnString = "Provider=SQLOLEDB;; Data Source=(local);; " & _
"Initial Catalog=pubs;; User ID=sa"
'建立對象ADOConnection
Dim objConn as ADOConnection
objConn = New ADOConnection
'設定ADOCOnnection對象的串連串
objConn.ConnectionString = strConnString
objConn.Open() '開啟資料鏈路
'資料庫作業碼省略
objConn.Close() '關閉資料鏈路
objConn = Nothing '清除對象
%>
上面的代碼和ADO沒有什麼太大的差別。應該提到的是,ADO.NET提供了兩種資料庫連接方式:ADO方式和SQL方式。這裡我們是通過ADO方式串連到資料庫。關於建立資料庫連接的詳細資料,我們在後面的篇幅中將會講到。
ADODatasetCommand
另一個不得不提到的ADO.NET對象是ADODatasetCommand,這個對象專門負責建立我們前面提到的DataSet對象。另一個重要的ADO.NET對象是Dataview,它是DataSet的一個視圖。還記得DataSet可以容納各種各種關係的複雜資料嗎?通過Dataview,我們可以把DataSet的資料限制到某個特定的範圍。
下面的代碼展示了如何利用ADODatasetCommand為DataSet填充資料:
'建立SQL字串
Dim strSQL as String = "SELECT * FROM authors"
'建立對象ADODatasetCommand 和Dataset
Dim objDSCommand as ADODatasetCommand
Dim objDataset as Dataset = New Dataset
objDSCommand = New ADODatasetCommand(strSQL, objConn)
'填充資料到Dataset
'並將資料集合命名為 "Author Information"
objDSCommand.FillDataSet(objDataset, "Author Information")
顯示Dataset
前面我們已經把資料準備好。下面我們來看看如何顯示Dataset中的資料。在ASP.NET中,顯示DataSet的常用控制項是DataGrid,它是ASP.NET中的一個HTML控制項,可以很好地表現為一個表格,表格的外觀可以任意控制,甚至可以分頁顯示。這裡我們只需要簡單地使用它:
<asp:DataGrid id="DataGridName" runat="server"/>
剩下的任務就是把Dataset綁定到這個DataGrid,綁定是ASP.NET的重要概念,我們將另文講解。一般來說,你需要把一個Dataview綁定到DataGrid,而不是直接綁定Dataset。好在Dataset有一個預設的Dataview,下面我們就把它和DataGrid綁定:
MyFirstDataGrid.DataSource = _
objDataset.Tables("Author Information").DefaultView
MyFirstDataGrid.DataBind()
Dataset的用法
Dataset 並不是Recordset的簡單翻版。從一定的意義上來說,DataView更類似於Recordset。如果說DataReader是訪問資料的最容易的方式,那麼Dataset則是最完整的Data Access Objects。通過Dataset,你可以操作已有的資料,還可以通過程式建立Dataset,加入Table到Dataset,並建立這些Table之間的關係。
使用Dataset的幾個步驟
第1步,建立到資料來源的串連:
SQLConnection con =new SQLConnection("server=localhost;;uid=sa;;pwd=;;database=pubs");;
第2步,建立DataSetCommand對象,指定一個預存程序的名字或者一個SQL語句,指定資料鏈路;
SQLDataSetCommand cmd =new SQLDataSetCommand("SELECT * FROM Authors", con);;
第3步,建立一個Dataset對象
DataSet ds = new DataSet();;
第4步,調用DataSetCommand的FillData方法,為Dataset填充資料。注意:資料鏈路沒有必要是開啟的。如果資料鏈路是關閉狀態,FillData函數會開啟它,並在FillData之後關閉資料鏈路。如果資料鏈路本來就是開啟的,在FillData之後,資料鏈路依然保持開啟狀態。
int iRowCount = cmd.FillDataSet(ds, "Authors");;
第5步,操作資料。由於FillData返回了記錄的個數,我們可以構造一個迴圈,來操縱Dataset中的資料。
for(int i=0;; i< iRowCount;; i++){
DataRow dr = ds.Tables[0].Rows[i];;
Console.WriteLine(dr["au_lname"]);;
}
資料繫結技術
Repeater、DataList 、DataGrid控制項是System.Web.UI.WebControls名空間(Namespace)裡幾個相關的頁面組件。這些控制項把綁定到它們的資料通過HTML表現出來,它們又被成為"列表繫結控制項"(list-bound controls)。
和其他Web組件一樣,這些組件不僅提供了一個一致的編程模型,而且封裝了與瀏覽器版本相關的HTML邏輯。這種特點使得程式員可以針對這個物件模型編程,而無須考慮各種瀏覽器版本的差別和不一致性。
這三個控制項具有把它們的相關資料"翻譯"成各種外觀的能力。這些外觀包括表格、多列列表、或者任何的HTML流。同時,它們也允許你建立任意的顯示效果。除此之外,它們還封裝了處理提交資料、狀態管理、事件激發的功能。最後,它們還提供了各種層級的標準操作,包括選擇、編輯、分頁、排序等等。利用這些控制項,你可以輕鬆地完成如下的Web應用:報表、購物推車、產品列表、查詢結果顯示、導覽功能表等等。