ADO.NET快速起步

來源:互聯網
上載者:User
ado 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對象進行深入的探討。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。