2013年12月7日 星期六

What's ADO.NET 了解ADO.NET

許多新手(包涵我)在接觸.Net的開發時,對ADO.NET可是說跟我一樣瞎子摸象。筆者透過一段時間的水深火熱的時間之下,整合一下自已和網路上的說明而整合出來的ADO.NET說明。

ADO.NET是Microsoft在.NET Framework中負責資料存取的類別庫集,它是使用在COM時代OLE DB技術以及.NET Framework的類別庫和程式語言。ADO.NET作為微軟最新的資料訪問技術,已經在企業開發中得到了廣泛的應用。
它能讓.NET上的任何程式語言能夠連接並存取關聯式資料庫與非資料庫型資料來源,或是獨立出來作為處理應用程式資料的型別物件。


ADO.NET的架構是由Connected Data Source以及Disconnected data model組成,這兩個部份是相輔相成的。

有四大主要來源:
SQL Server 原生資料來源-System.Data.SqlClient。
OLE DB 資料來源-System.Data.OleDb。
Oracle 資料來源-System.Data.OracleClient。
ODBC 資料來源-System.Data.Odbc。


Connected Data Source

Connected Data Source是用來連接資料庫,由下列型別所構成:
IDbConnection,負責與資料庫的連線管理,包含連線字串 (connection string),連線的開關,資料庫交易的啟始與連線錯誤的處理,所有的 ADO.NET 資料提供者都要實作此介面。

  • Open()/Close():開啟與關閉資料庫連線。
  • BeginTransaction():啟動資料庫交易,並回傳一個 IDbTransaction 物件,以控制交易的結果。

IDbCommand,負責執行資料庫指令,並傳回由資料庫中擷取的結果集,或是執行不回傳結果集的資料庫指令。

  • ExecuteNonQuery():執行不回傳結果集的資料庫指令,像是INSERT、UPDATE與DELETE指令。
  • ExecuteScalar():執行指令並回傳第一列第一行中的資料。
  • ExecuteReader():執行指令並回傳 IDataReader 物件,以讀取資料集中的資料。

IDataParameter,負責裝載資料庫指令所需要的參數資料,在使用參數化查詢時會經常使用。
IDbTransaction,負責裝載資料庫交易所需的控制物件,以執行交易的認可 (commit) 或撤銷 (rollback) 的工作。

  • Commit():認可資料庫交易。
  • Rollback():撤銷資料庫交易。

IDbDataAdapter,負責將來自於 IDbCommand 執行取得的結果集,裝載到Disconnected DataSet 或是Disconnected DataTable中。

  • Fill():將資料填入離線型資料物件。
  • Update():將變更過的離線型資料物件中的資料寫回資料庫。

IDataReader,建立一個只可向前讀取游標 (forward-only) 的資料讀取器工具,以逐列讀取方式存取資料,IDbDataAdapter內部也是由它來讀取資料。

  • Read():讀取下一列,開發人員利用此方法移動資料集中的游標,若資料集中的資料列已讀取完畢時,傳回 false。

IDataRecord,在 IDataReader 讀取資料後實際裝載資料列的物件,提供方法來讀取資料行中的資料,以及轉換成.NET Framework原生型別的工具。

  • GetOrdinal():取得指定資料行的欄位索引值。
  • IsDBNull():判斷指定欄位的資料是否為NULL值。


Disconnected data model

Disconnected data model是微軟為了改良ADO在網路應用程式中的缺陷所設計的,同時它也是COM+中,IMDB技術的設計概念,但並沒有完整的IMDB功能,像是交易處理 (transaction processing),Disconnected data model也可以透過連線資料來源物件,支援將離線資料存回資料庫的能力。Disconnected data model由下列物件組成:

DataSet,Disconnected data model的核心之一,本身也提供了可以和 XML 互動作業的支援,可當成離線型的資料庫,它可以內含許多個 DataTable,可利用關聯與限制方式來設定資料的完整性。
  • ReadXml()/WriteXml():以 DataSet 的結構讀寫 XML。
  • ReadXmlSchema()/WriteXmlSchema():以 DataSet 的結構讀寫XML Schema。
  • GetXml()/GetXmlSchema():取得 DataSet 內容的 XML 或 XML Schema。
  • Merge():合併兩個 DataSet。
  • Load():自 IDataReader 載入資料到 DataSet。
  • AcceptChanges():將修改過的資料列的修改旗標改為 Unchanged。
  • GetChanges():將修改過的資料列以 DataRow 陣列方式傳回。
  • RejectChanges():撤銷所有資料的修改。
DataTable,也是的核心之一,可以儲存在 XML 中的特性,可將它當成一個離線型的資料表,是儲存資料的收納器。
  • Copy():將 DataTable 複製出一個副本,包含結構與資料。
  • Merge():將兩個 DataTable 合併。
  • Select():以指定的特殊查詢語法,傳回符合條件的 DataRow 陣列。
  • Compute():以指定的彙總語法,傳回彙總的結果。
  • GetErrors():傳回有錯誤的 DataRow 陣列。
  • HasErrors:判斷 DataTable 中的 DataRow 有沒有含有錯誤的 DataRow。
DataRow,表示表格中的資料列,與資料欄組合成資料儲存的單元。
  • IsNull():判斷指定的欄位是否為 NULL 值。
  • ItemArray:將 DataRow 中的資料轉換成陣列。
DataColumn,表示表格中的欄位。
DataView,展示資料的輔助元件,類似於資料庫中的檢視表,並可設定過濾條件與排序條件。
  • Filter:設定 DataView 的過濾條件。
  • Sort:設定 DataView 的排序條件。
  • ToTable():將套用過濾與排序後的內容轉換為 DataTable 物件。
DataRelation,可在 DataTable 之間設定欄位間的關聯。
Constraint,設定欄位的條件約束。

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言