通過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
|