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
(及更新版本)以及可以通過 OLE DB 提供者進行訪問的任何數據源
這些又稱為被管理的提供者(Managed Provider)
NET框架的數據存取API提供了兩種方式分別識別並處理兩種類型的數據源
SQL Server
(及更新版本)和可以通過 OLE DB 提供者進行訪問的任何數據源
SQL(System
Data
SQL)庫可以直接聯結到SQL Server的數據
而ADO (System
Data
ADO)庫可用於其他通過OLE DB 提供者進行訪問的任何數據源
SQL Server被管理的提供者在MS SQL Server
或以後的版本中使用叫做
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
; 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
; 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對象去讀
行數據庫的記錄
就必須為這
行記錄將內存分配給這個連接直至這個連接的生命周期結束
如果有
用戶在同一時間對同一計算機進行同樣的操作
內存被過度的使用就會成為關鍵性的問題
為了解決這些問題
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
From:http://tw.wingwit.com/Article/program/net/201311/13836.html