網域查詢: www.
返回首頁

ADO.NET快速起步

時間:2010-02-13 00:35來源: 作者: 點擊:
ADO.NET是微軟的Microsoft ActiveX Data Objects (ADO)的下一代產品,是在微軟的.NET中創建分布式和數據共享應用程序的應用程序開發接口(API)。 ADO.NET能被用在任何用戶的應用程序,需要和OLE DB-
  ADO.NET是微軟的Microsoft ActiveX Data Objects (ADO)的下一代產品,是在微軟的.NET中創建分布式和數據共享應用程序的應用程序開發接口(API)。

ADO.NET能被用在任何用戶的應用程序,需要和OLE DB-compliant的數據源連接和通訊,例如Microsoft SQL Server。

同時ADO.NET又保持著與以前的ADO模型有關的一些主要概念,它已經被極大的完善,並從不同的信息來源提供途徑去獲得結構化的數據----一個平台文本文件,從數據庫管理系統獲得的相關數據,或者是分級的XML數據----然而,所有都按照一個相容的,標準化的設計模型來執行。

這篇文章意在簡要的介紹ADO.NET的關鍵特性,重點講述了在關系數據庫管理系統(rdbms)中訪問數據。

快速瀏覽

SQL Server 7.0(及更新版本)以及可以通過 OLE DB 提供者進行訪問的任何數據源。這些又稱為被管理的提供者(Managed Provider)。.NET框架的數據存取API提供了兩種方式分別識別並處理兩種類型的數據源︰SQL Server 7.0(及更新版本)和可以通過 OLE DB 提供者進行訪問的任何數據源。SQL(System.Data.SQL)庫可以直接聯結到SQL Server的數據,而ADO (System.Data.ADO)庫可用于其他通過OLE DB 提供者進行訪問的任何數據源。

SQL Server被管理的提供者在MS SQL Server 7.0或以後的版本中使用叫做“tabulardata stream”的專用協議,而沒有使用OLE DB, ADO 或 ODBC。

ADO.NET被管理的提供者能夠在這些OLE DB 提供者下工作。

驅動程序 Driver
提供者 Provider

SQLOLEDB
SQL OLE DB Provider

MSDAORA
Oracle OLE DB Provider

JOLT
Jet OLE DB Provider

MSDASQL/SQLServer ODBC
SQL Server ODBC Driver via OLE DB for ODBC Provider

MSDASQL/Jet ODBC
Jet ODBC Driver via OLE DB Provider for ODBC Provider


現在ADO.NET還不支持 MSDASQL/Oracle ODBC Driver(ORACLE OLE DB DRIVER FOR ODBC)。

以下章節將介紹每個被管理的提供者都可用的ADO.NET的核心組件

Connections--連接和管理數據庫事務。
Commands--向數據庫發送的命令。
DataReaders--直接讀取流數據。
DateSets 和 DateSetCommands--對駐留內存中的數據進行存儲和操作。


核心的ADO.NET功能基本上可以被概括為如下內容︰

Connection對象在Web頁面和數據庫間建立連接。Commands對象向數據庫提供者發出命令,返回的結果以一種流的方式貫穿于這些連接中。結果集可以用DataReaders快速的讀取,也可以儲存到駐留內存的DateSets對象中,然後通過DateSetCommands對象讓用戶在數據集中訪問和操作記錄。開發者可以用過DateSet內置的方法在基礎的數據源上去處理數據集。

為了使用.NET框架中的被管理提供者,需要把下面的名空間(namespaces)包括到.aspx頁面中。

SQL被管理的提供者︰

<%@ Import Namespace="System.Data.SQL" %>


 


ADO被管理的提供者︰

<%@ Import Namespace="System.Data.ADO" %>


 


Connections

微軟在.NET框架中提供了兩個Connection對象以建立連接到特定的數據庫︰SQLConnection和 ADOConnection。Connection對象能在已經創建的連接上通過調用open的方法來被明確的打開連接。下面的代碼片斷演示了用任一提供者創建和打開連接。

SQLConnection

[C#]
String connectionString = "server=localhost; uid=sa; pwd=; database=northwind";
SQLConnection myConn = new SQLConnection(connectionString);
myConn.Open();

[VB]
Dim connectionString As String = _
 m connectionString As String = _
   "server=localhost; uid=sa; pwd=; database=northwind"
Dim myConn As SQLConnection = New SQLConnection(connectionString)
myConn.Open



ADOConnection

[C#]
String connectionString = "Provider=SQLOLEDB.1; Data Source=localhost; uid=sa; pwd=; Initial Catalog=Northwind;"
ADOConnection myConn = new ADOConnection(connectionString);
myConn.Open();

[VB]
Dim connectionString As String = _
 ost; uid=sa; pwd=; Initial Catalog=Northwind;"
ADOConnection myConn = new ADOConnection(connectionString);
myConn.Open();

[VB]
Dim connectionString As String = _
   "Provider=SQLOLEDB.1; Data Source=localhost; " & _
   "uid=sa; pwd=; Initial Catalog=Nohwind"
Dim myConn As ADOConnection = New ADOConnection(connectionString)
myConn.Open()



Commands


在建立了連接以後,下一步要做的就是對數據庫運行的SQL語句。最簡單直接的方法是通過ADO和SQL命令對象來實現。

Command對象可以給予提供者一些該如何操作數據庫信息的指令。

一個命令(Command)可以用典型的SQL語句來表達,包括執行選擇查詢(select query)來返回記錄集,執行行動查詢(action query)來 更新(增加、編輯或刪除)數據庫的記錄,或者創建並修改數據庫的表結構。當然命令(Command)也可以傳遞參數並返回值。

Commands可以被明確的界定,或者調用數據庫中的存儲過程。接下來的小段代碼證明了在建立連接之後如何去發出一個Select命令。

SQLCommand

[C#]
String SQLStmt = " SELECT * FROM Customers";
SQLCommand myCommand = new SQLCommand(SQLStmt, myConn);

[VB]
Dim SQlStmt As String = "SELECT * FROM Customers"
Dim myCommand As SQLCommand = New SQLCommand(SQLStmt, myConn)



ADOCommand

[C#]
String SQLStmt = " SELECT * FROM Customers";
ADOCommand myCommand = new ADOCommand(SQLStmt, myConn);

[VB]
Dim SQlStmt As String = "SELECT * FROM Customers"
Dim myCommand As ADOCommand = New ADOCommand(SQLStmt, myConn)


DataReaders

當你處理大量數據的時候,大量內存的佔用會導致性能上的問題。例如,一個連接(connection)用傳統的ADO Recordset對象去讀1000行數據庫的記錄,就必須為這1000行記錄將內存分配給這個連接直至這個連接的生命周期結束。如果有1000用戶在同一時間對同一計算機進行同樣的操作,內存被過度的使用就會成為關鍵性的問題。

為了解決這些問題,.NET框架包括了DataReaders對象,而這個對象僅僅從數據庫返回一個只讀的,僅向前數據流。而且當前內存中每次僅存在一條記錄。

DataReader接口支持各種數據源,比如關系數據和分級數據。DataReader可以適用于在運行完一條命令僅需要返回一個簡單的只讀記錄集。

下面的代碼片斷闡述了怎麼樣聲明變量指向一個DataReader對象的實例,還包括代碼執行時Command對象產生的結果。當調用Command對象執行方法時,Command對象必須已經被創建和作為參數來傳遞。繼續上面的例子︰

SQLDataReader

[C#]
SQLDataReader myReader = null;
myCommand.Execute(out myReader);

[VB]
Dim myReader As SQLDataReader = Nothing
myCommand.Execute(myReader)



ADODataReader

[C#]
ADODataReader myReader = null;
myCommand.Execute(out myReader);

[VB]
Dim myReader As ADODataReader = Nothing
myCommand.Execute(myReader)



接下來這步是一個使用DataReader的簡單格式

[C#]
While (myReader.Read()) {
 [C#]
While (myReader.Read()) {
   // do your thing with the current row here
}

[VB]
While myReader.Read
 ' do your thing with the current row here
End While


下面的例子展示了迄今為止我們所討論的內容︰建立一個到SQL數據源的連接,對于連接的發送select命令,用DataReader對象來保存返回的結果,然後通過循環DataReader取得數據。

下面是用C#寫的完整代碼。

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>

<html>
<head>

<script language="C#" runat="server">
public SQLDataReader myReader;
public String html;

protected void Page_Load(Object Src, EventArgs E ) {
   SQLConnection mySQLConnection = new SQLConnection("server=localhost;uid=sa;pwd=;database=northwind");
   SQLCommand mySQLCommand = new SQLCommand("select * from customers", mySQLConnection);

   try {
      mySQLConnection.Open();
      mySQLCommd.Execute(out myReader);

 .Execute(out myReader);

      html="<Table>";
      html+="<TR>";
      html+="<TD><B>Customer ID</B>   </TD>";
      html+="<TD><B>Company Name</B></TD>";
      html+="</TR>";

      while (myReader.Read()) {
         html+="<TR>";
         html+="<TD + myReader["CustomerID"].ToString() + "</TD>";
 + myReader["CustomerID"].ToString() + "</TD>";
         html+="<TD>" + myReader["CompanyName"].ToString() + "</TD>";
         html+="</TR>";
      }
      html+="</Table>";
   }
   catch(Exception e) {
      html=e.ToString();
   }
   finall y {
      meader.Close();
 ader.Close();
      mySQLConnection.Close();
   }
   Response.Write(html);
}
</script>
</head>

<body>

</body>
</htm


注意,真正的捕獲塊已經包括在"try ... catch"語句中了。這提供了一些處理連接時出現異常的方法。在“finally”塊中的代碼總是會被執行,不管是否已經執行的是“try”或“catch”塊,所以它變成關閉reader和conncetion對象的邏輯位置。

同時也注意DataReader中字段的值是怎麼被方便的訪問和傳遞的。  



總結︰本文主要介紹了ADO.NET的基本特點,並且使用的一些代碼展示了在ADO.NET中如何建立數據庫連接,發送查詢命令及使用DataReader對象快速瀏覽數據集方式。當然作為微軟面向分布式應用和數據共享的新一代ADO產品,它正真的精華是DateSets對象。為此,本網站將在即將推出的《ADO.NET深入研究》中對DateSets對象進行深入的探討。

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
最新評論 查看所有評論
發表評論 查看所有評論
請自覺遵守互聯網相關的政策法規,嚴禁發佈色情、暴力、反動的言論。
評價:
表情:
用戶名: 密碼: 驗證碼:
推薦內容