ADO.NET對象模型

ADO.NET對象模型中有5個主要的數據庫訪問和操作對象,分別是Connection、Command、DataReader、DataAdapter和DataSet對象。
 
其中,Connection對象主要負責連接數據庫,Command對象主要負責生成並執行SQL語句, DataReader對象主要負責讀取數據庫中的數據,DataAdapter對象主要負責在Command對象執行完SQL語句後生成並填充 DataSet和DataTable,而DataSet對象主要負責存取和更新數據。
 
ADO.NET主要提供了兩種數據提供者(Data Provider),分別是SQL Server.NET Provider和OLE DB.NET Provider。
 
SQL Server.NET Framework數據提供程序使用它自身的協議與SQL Server數據庫服務器通信,而OLE DB.NET Framework則通過OLE DB服務組件(提供連接池和事務服務)和數據源的OLE DB提供程序與OLE DB數據源進行通信。
 
它們兩者內部均有Connection、 Command、DataReader和DataAdapter 4類對象。對於不同的數據提供者,上述4種對象的類名是不同的,而它們連接訪問數據庫的過程卻大同小異。這是因爲它們以接口的形式,封裝了不同數據庫的連接訪問動作。正是由於這兩種數據提供者使用數據庫訪問驅動程序屏蔽了底層數據庫的差異,所以從用戶的角度來看,它們的差別僅僅體現在命名上。
 
下表描述了這兩類數據提供者下的對象命名。
 

ADO.NET對象描述
 

 


對 象 名
 

OLE DB數據提供者的類名
 

SQL Server數據提供者類名
 

 

Connection對象
 

OleDbConnection
 

SqlConnection
 

 

Command對象


OleDbCommand
 

SqlCommand
 

 

DataReader對象
 

OleDbDataReader
 

SqlDataReader
 

 

DataAdapter對象
 

OleDbDataAdapter
 

SqlDataAdapter
 


Connectionion對象主要用於連接數據庫,它的常用的屬性如下。
 
Ü  ConnectionString屬性:該屬性用來獲取或設置用於打開 SQL Server 數據庫的字符串。
 
Ü  ConnectionTimeout屬性:該屬性用來獲取在嘗試建立連接時終止嘗試,並生成錯誤之前所等待的時間。
 
Ü  DataBase屬性:該屬性用來獲取當前數據庫或連接打開後要使用的數據庫的名稱。
 
Ü  DataSource屬性:該屬性用來設置要連接的數據源實例名稱,例如SQL Server的Local服務實例。
 
Ü  State屬性該屬性:是一個枚舉類型的值,用來表示同當前數據庫的連接狀態。該屬性的取值情況和含義如表所示。
 
表Provider值描述
 

 


屬  性  值
 

對 應 含 義
 

 

Broken
 

該連接對象與數據源的連接處於中斷狀態。只有當連接打開後再與數據庫失去連接纔會導致這種情況。可以關閉處於這種狀態的連接,然後重新打開
 

 

Closed
 

該連接對象正在與數據源連接
 

 

Connecting
 

該連接對象正在與數據源連接
 

 

Executing
 

該連接對象正在執行數據庫操作的命令
 

 

Fetching
 

該連接對象正在檢索數據
 

 

Open
 

該連接處於打開狀態
 

State屬性一般是隻讀不寫的,以下代碼演示了使用State屬性管理控制數據連接的方式。
 

//設置連接對象
 
SqlConnection conn;       

//如果是空閒狀態,連接數據庫

if ( conn.State == ConnectionState.Closed)

{
 
conn.Open();
 
}
 
//訪問數據庫的代碼
 

 
//最後關閉連接
 
if(conn.State == ConnectionState.Open )
 
{
 
    conn.Close();
 
}
 
在ConnectionString連接字符串裏,一般需要指定將要連接數據源的種類、數據庫服務器的名稱、數據庫名稱、登錄用戶名、密碼、等待連接時間、安全驗證設置等參數信息,這些參數之間用分號隔開。下面將詳細描述這些常用參數的使用方法。
 
1. Provider參數
 
Provider參數用來指定要連接數據源的種類。如果使用的是SQL Server Data Provider,則不需要指定Provider參數,因爲SQL Server Data Provider已經指定了所要連接的數據源是SQL Server服務器。如果使用的是OleDB Data Provider或其他連接數據庫,則必須指定Provider參數。下表說明了Provider參數值和連接數據源類型之間的關係。
 
表Provider值描述
 

 


Provider值
 

對應連接的數據源
 

 

SQLOLEDB
 

Microsoft OLEDB Provider for SQL Server
 

 

MSDASQL
 

Microsoft OLEDB Provider for ODBC
 

 

Microsoft.Jet.OLEDB.4.0
 

Microsoft OLEDB Provider for Access
 

 

MSDAORA
 

Microsoft OLEDB Provider for Oracle
 

2. Server參數
 
Server參數用來指定需要連接的數據庫服務器(或數據域)。比如Server = (local),指定連接的數據庫服務器是在本地。如果本地的數據庫還定義了實例名,Server參數可以寫成Server = (local)/實例名。如果連接的是遠端的數據庫服務器,Server參數可以寫成Server = Ip'或“Server = 遠程計算機名”的形式。
 
Server參數也可以寫成Data Source,比如Data Source = Ip。
 
3. DataBase參數
 
DataBase參數用來指定連接的數據庫名。比如DataBase = Master,說明連接的數據庫是Master,DataBase參數也可以寫成Initial Catalog,如Initial Catalog = Master。
 
4. Uid參數和Pwd參數
 
Uid參數用來指定登錄數據源的用戶名,也可以寫成User ID。比如Uid(User ID) = sa,說明登錄用戶名是sa。
 
Pwd參數用來指定連接數據源的密碼,也可以寫成Password。比如Pwd(Password) = asp.net,說明登錄密碼是asp.net。
 
5. Connect Timeout參數
 
Connect Timeout參數用於指定打開數據庫時的最大等待時間,單位是秒。如果不設置此參數,默認是15秒。如果設置成–1,表示無限期等待,一般不推薦使用。
 
6. Integrated Security參數
 
Integrated Security參數用來說明登錄到數據源時是否使用SQL Server的集成安全驗證。如果該參數的取值是True(或SSPI,或Yes),表示登錄到SQL Server時使用Windows驗證模式,即不需要通過Uid和Pwd這樣的方式登錄。如果取值是False(或No),表示登錄SQL Server時使用Uid和Pwd方式登錄。
 
一般來說,使用集成安全驗證的登錄方式比較安全,因爲這種方式不會暴露用戶名和密碼。
 
7. Pooling、Max Pool Size和Min Pool Size參數
 
Pooling參數用來說明在連接到數據源時,是否使用連接池,默認是True。當該值爲True 時,系統將從適當的池中提取 SQLConnection 對象,或在需要時創建該對象並將其添加到適當的池中。當取值爲False時,不使用連接池。
 
當應用程序連接到數據源或創建連接對象時,系統不僅要開銷一定的通信和內存資源,還必須完成諸如建立物理通道 (例如套接字或命名管道),與服務器進行初次握手,分析連接字符串信息,由服務器對連接進行身份驗證,運行檢查以便在當前事務中登記等任務,因此往往成爲最爲耗時的操作。
 
實際上,大多數應用程序僅使用一個或幾個不同的連接配置。這意味着在執行應用程序期間,許多相同的連接將反覆地打開和關閉。爲了使打開的連接成本最低,ADO.NET使用稱爲Pooling(即連接池)的優化方法。
 
在連接池中,爲了提高數據庫的連接效率,根據實際情況,預先存放了若干數據庫連接對象,這些對象即使在用完後也不會被釋放。應用程序不是向數據源申請連接對象,而是向連接池申請數據庫的連接對象。另外,連接池中的連接對象數量必須同實際需求相符,空置和滿載都對數據庫的連接效率不利。
 
Max Pool Size和Min Pool Size這兩個參數分別表示連接池中最大和最小連接數量,默認分別是100和0。根據實際應用適當地取值將提高數據庫的連接效率。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/kybd2006/archive/2007/07/12/1687026.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章