ADO.NET資料庫訪問技術,ado.net資料庫訪問

來源:互聯網
上載者:User

ADO.NET資料庫訪問技術,ado.net資料庫訪問

一. ADO.NET的定義


ADO.NET來源於COM組件庫ADO(即ActiveX Data Objects),是微軟公司新一代.NET資料庫的訪問模型,是目前資料庫程式設計人員用來開發基於.NET的資料庫應用程式的主要介面。它利用.NET Data Provider(資料提供者)進行資料庫的串連和訪問,通過ADO.NET資料庫程式能夠使用各種對象來訪問合格資料庫內容,讓提供資料庫管理系統的各個廠商可以根據此標準開放對應的.NET Data Provider,這樣設計資料庫應用程式人員不必瞭解各類資料庫底層運作的細節,只要掌握ADO.NET所提供對象的模型,便可訪問所有支援.NET Data Provider的資料庫。

ADO.NET結構模型如下所示:

 圖1. ADO.NET結構模型

  ADO.NET是一個類庫,這些類提供了很多的對象,可用於完成資料庫連接和增刪查改等操作。其中包括如下五個對象: 1)Connection:用來串連資料庫(SQL Server使用的是SqlConnection對象); 2)Command:用來對資料庫執行SQL命令,如增刪查改等操作; 3)DataReader:用來從資料庫中返回唯讀資料,用資料來源填充DataSet對象; 4)DataAdapter:與DataSet對象相結合使用,實現對資料庫的控制; 5)DataSet:可看作離線時記憶體中的資料庫; 這五個對象提供了兩種讀取資料庫的方式; 第一種方式:使用Connection、Command、DataReader,其許可權只能讀取或查詢資料庫; 第二種方式:使用Connection、Command、DataAdapter、DataSet,其許可權能進行各種資料庫的操作。 ADO.NET讀取資料庫操作: 

圖1. ADO.NET結構模型

 
二. 使用ADO.NET線上訪問資料庫的步驟(這裡用的是SQL Server 資料庫)
 
1. 串連資料庫
直接上一段代碼:

using System.Data.SqlClient;string source = "server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa"; SqlConnection conn = new SqlConnection(source); conn.Open(); // 對資料庫資料進行操作 conn.Close();


  (1). 首先添加命名空間System.Data.SqlClient;

(2). 定義資料庫連接字串:

第一種方法:直接把資料庫連接字串存放在字串對象中,如上代碼所示;

第二種方法Web:將資料庫連接資訊存放在web.config設定檔中,然後通過使用ConfigurationStringSettings類進行調用。來個例子說明一下:

(a). 首先,在web.config設定檔的部分定義資料庫連接資訊:

<configuration><connectionStrings><add name="myDatabase" connectionString="server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa" providerName="System.Data.SqlClient" /></connectionStrings></configuration>


(b). 在專案檔中,添加對Configuration的引用,在頭部添加using System.Configuration。然後定義資料庫連接字串為:

複製代碼 代碼如下:string connstring = ConfigurationManager.ConnectionStrings["myDatabase"].ConnectionString;


備忘:必須添加對System.Configuration程式集的引用,才能解析上述代碼中使用的ConfigurationManager類。

2. 建立資料庫連接
1)建立Connection對象:

string conn = new SqlConnection(connString); 

2)開啟資料庫: conn.Open(); 一般情況下,當在.NET中使用“稀缺”的資源時,如資料庫連接、視窗或繪圖物件,最好確保每個資源在使用完畢後立即關閉。儘管.NET的設計人員實現了自動垃圾收集機制,垃圾最終會被回收,但仍需要儘可能早地釋放資源,以避免出現資源匱乏的情況。 當編寫訪問資料庫的代碼時,因為使串連開啟的時間略長於需要的時間,就可能影響其他會話。在極端的情況下,不關閉串連可能會使其他使用者無法進入一整組資料表,極大地降低應用程式的效能。主要有兩種方式可以確保資料庫連接等類似的“稀缺”資源在使用完後立即釋放。這兩種方式如下: (1)第一種方式:採用try...catch...finally語句塊 確保在finally中關閉任何已開啟的串連。

try { // open the connection conn.Open(); // 對資料庫資料進行操作 } catch (SqlException ex) { // log the exception } finally { conn.Close(); }


在給定的方法中可能會開啟許多資源,這樣try...catch...finally塊的層次有時候不容易看清。還有一種方式可以確保資源的關閉——using語句。 (2)使用using語句塊

using(SqlConnection conn = new SqlConnection(connstring)){ // Open the connection conn.Open(); // 對資料庫資料進行操作 }


無論塊是如何退出的,using子句都會確保關閉資料庫連接。 

 
3. 建立資料庫操作命令:


Connection對象與資料來源建立串連後,使用Command對象對資料來源執行查詢、插入、修改和刪除等操作。

(1) 建立SQL資料庫操作命令: sqlQuery查詢語句具體規則請詳見我的系列文章:【讀書筆記】SQL Server查詢語句_鄧智容 (2) 建立Command對象:

(a). 方法一:

複製代碼 代碼如下:SqlCommand command = new SqlCommand(); command.Connection = conn; command.CommandText = "SQL語句";

(b). 方法二:

SqlCommand command = new SqlCommand("SQL語句", conn); 

備忘: 1). SQL查詢語句若含有C#程式的變數並以字串形式串連,則應注意資料為非數位變數應用單引號括起來; 2). 在SQL查詢語句中使用參數化查詢語句的話,譬如:

command.CommandText = "SELECT * FROM myTable WHERE siteName=@siteName"; 

當需要給該參數賦值時,可以使用Command對象建立參數對象,然後再賦值:

複製代碼 代碼如下:command.Parameters.Add(new SqlParameter(@siteName, siteName)); command.Parameters["@siteName"].Value = "http://#";

備忘: 在.Net Framework 2.0中SqlClient增加了AddWithValue(string parameterName, object value)方法。該方法簡化了調用儲存過程的輸入參數過程,在運行時對所輸入的資料類型進行判斷,擷取對應的資料庫類型。 因此該方法在運行效率上比用 Add(string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)方法要低。 在效率要求較高的地方仍然建議使用Add()方法,其它場合可以使用AddWithValue()簡化代碼編寫量。

 
4. 執行sqlQuery命令:


定義好命令後,就需要執行它。執行的語句有多種方式,這取決於要從命令中返回什麼資料。Command類提供了下述可執行檔命令: (1) ExecuteNonQuery() —— 執行命令,但不返回任何結果。一般用於UPDATE、INSERT或DELETE語句中,其中唯一的傳回值是受影響的記錄個數。但如果調用帶有輸出參數的預存程序,該方法就有傳回值。 (2) ExecuteReader() —— 執行命令,返回一個類型化的IDataReader。是從資料來源中選擇某些資料的最簡單快捷的方法。 (3) ExecuteScalar() —— 執行命令,返回結果集中的第一行第一列的值。

 
5. 對資料庫操作完畢後關閉資料庫連接:


conn.Close();

 
三. 離線資料庫訪問


DataAdapter對象主要在Connection對象和DataSet對象之間執行資料的傳輸工作,將資料填充到DataSet對象中,也可把DataSet對象更新後的資料返回到資料來源中,也可架構在Command對象上,通過CommandBuilding對象產生DataAdapter的Insert、Update和Delete等SQL操作命令。使用DataSet和DataTable對象訪問資料來源後,ADO.NET會自動離線,在記憶體中處理資料,如有修改資料的操作,將自動重新串連資料來源,更新資料庫。DataSet對象、DataAdapter對象與資料來源之間的關係如下:

DataSet <---> DataAdapter <---> 資料來源
下面是使用DataAdapter進行離線資料庫訪問的操作步驟:

1. 建立DataAdapter、DataTable對象(使用的是SQL Server資料庫)

複製代碼 代碼如下:SqlAdapter da = new SqlAdapter("sqlQuery查詢語句", conn); DataSet = ds = new DataSet(); DataTable dt = new DataTable();

2. 將資料填充到DataTable對象

da.Fill(ds, "TableName"); dt = ds.Tables["TableName"]; 

3. 對DataTable中的資料進行處理 TataTable對象的屬性和方法有: 

名稱 屬性/方法 說明
Rows.Add() 方法 插入新資料行
Rows[n].Delete() 方法 刪除第n行的記錄
Rows.Count 屬性 擷取行數
Rows[i]["ColumnName"] 屬性 擷取第i行、列名為ColumnName的值
Rows[i][j] 屬性 擷取第i行、第j列的值
 
  還有一種資料查詢技術:LINQ。下回再討論。

通過以上對ADO.NET資料庫訪問技術的介紹,希望對大家有所協助。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.