380 likes | 561 Views
ADO.NET 開發高手系列. 主講人:章立民 台灣微軟資深特約講師 台灣微軟最有價值專家 資深電腦圖書作家. ADO.NET 開發高手線上教學課程 第三個單元 ADO.NET 的基礎知識. 什麼是 ADO.NET. ActiveX Data Objects for the .NET Framework 一組用於存取各類型資料的類別。 System.Data.dll System.Xml.dll 編譯使用 System.Data 命名空間的程式碼時,請同時參考 System.Data.dll 和 System.Xml.dll 。
E N D
ADO.NET 開發高手系列 主講人:章立民台灣微軟資深特約講師台灣微軟最有價值專家資深電腦圖書作家
什麼是 ADO.NET • ActiveX Data Objects for the .NET Framework • 一組用於存取各類型資料的類別。 • System.Data.dll • System.Xml.dll • 編譯使用 System.Data 命名空間的程式碼時,請同時參考 System.Data.dll 和 System.Xml.dll。 • 提供開發人員撰寫 Managed 程式碼的功能。
ADO.NET 的特性(1/2) • 以 .NET Framework 為基礎來加以構建的最大好處,就是可以確保資料存取技術統一而且一致,也就是說,元件會共用一個通用的型別系統、設計模式、和命名慣例。 • 特性一:既有 ADO 技術知識的延伸 • .NET 程式設計師仍然可以透過 .NET COM 互通性服務來使用 ADO • 特性二:支援 N 階層的程式撰寫模型 • 特性三:中斷連接(Disconnected) • ADO.NET 的資料存取作業並不會讓資料庫連接一直保持在開啟狀態,而是採用中斷連接的做法。 • 應用程式連接至資料庫的時間僅僅足夠提取或更新資料,一旦完成後就立即斷線。
ADO.NET 的特性(2/2) • 特性四:跨程式語言支援 • Visual Basic .NET • Visual C# • Visual C++ • Visual J# • 特性五:XML 支援 • .NET Framework 緊密結合 ADO.NET 與 XML,此二者都是單一架構上的元件。 • .NET Framework 中的 ADO.NET 與 XML 類別匯集於 DataSet 物件。 • DataSet 的原生序列化格式是 XML,所以相當適合擔任各階層間資料移動的媒介。 • DataSet 也可以與 XmlDataDocument 同步處理,以關聯式和階層式方式即時存取資料。
ADO.NET 的架構(1/4) • ADO.NET 將其元件區分為「資料存取」和「資料操作」兩大類。 • 資料存取的中心元件:DataSet • 資料操作的中心元件:.NET Framework資料提供者
ADO.NET 的架構(3/4) • DataSet • 中斷連接架構的核心元件 • 能夠獨立於各種資料來源來進行資料存取作業 • 內含由一或多個 DataTable 物件所組成的集合 • .NET Framework 資料提供者 • Connection 物件 • Command 物件 • DataReader 物件 • DataAdapter 物件
DataSet 物件 - 獨立於資料來源之外 • 一旦從資料來源提取出所需的資料並填入資料集,它就不再與資料來源保持連接。 • 由於資料集並未與資料來源保持直接的連動關係,因此它非常適合用來整合來自不同位置之多種且不同類型之資料來源(當然包括 XML)中的資料,並於本機電腦中管理這些資料。 • 資料集是資料的被動容器,必須透過資料配接器來填入與寫回。 • 資料集可以說是資料庫資料的私用副本,它不一定會反應出資料庫目前的狀態。 • 使用資料集的優點之一就是元件可以根據它們的需要來交換資料集。
DataSet 物件 - 緊密整合 XML • .NET Framework 與 ADO.NET 中的 XML 類別係屬於同一架構,並且可以在各種不同的層級上整合。 • 當我們需要在不同元件間傳遞資料時,應先將資料從資料來源提取出來並存放於資料集中,然後於元件間以 XML 格式傳遞資料集。 • XML 就是 ADO.NET 的基礎資料格式。 • 由於 ADO.NET 會在程式或網頁間使用 XML 來交換資料,因此任何能夠讀取 XML 的元件都可以使用 ADO.NET 元件。 • XML 是以純文字為基礎,它不使用二進位資訊來表示資料,這使得它能夠透過任何通訊協定來傳送。 • 對於一個分散式應用程式而言,傳送 ADO.NET 的資料集要比使用 COM 封送處理(Marshalling)來傳送 ADO 中斷連接資料錄集來得容易且有效率。
DataSet 物件 - 構描述定義資料結構 • 於 ADO.NET 中,當您在處理中繼資料 (Metadata)時,您其實是在直接使用 XML。 • 資料集是以 XML 表示的。資料集的結構(亦即資料表、欄位、資料型別、條件約束…等等的定義)都是使用以 XSD(XML 結構描述定義語言)為依據的 XML 結構描述來定義。正如同資料集所內含的資料可以被載入並序列化成 XML,資料集的結構也可以被載入並序列化為 XML 結構描述。
Connection 物件(1/2) • Connection 物件會使用一個連接字串來內含連接至一個資料來源的所需資訊。 • .NET Framework 中並沒有一個名稱為 Connection 的類別,而是各種資料提供者會實作它們自己的連接類別。
Connection 物件(2/2) • 當我們需要一個 Connection 物件時,並不會直接建立 IDbConnection 介面的執行個體,而會建立繼承 IDbConnection 之類別的執行個體。 • 繼承 IDbConnection 的類別必須實作繼承而來的所有成員,而且通常會根據資料提供者的特性定義額外的成員以便加入該資料提供者所特有的功能。 • 為了促進 .NET Framework 資料提供者之間的一致性,請以 PrvClassname 的形式來命名繼承的類別,其中 Prv是指派給特定 .NET Framework 資料提供者之命名空間中所有類別的統一前置詞。
Command 物件(1/3) • 用途 • 透過 Connection物件來針對資料來源執行 SQL 陳述式或預存程序以便將資料傳回至 DataReader或 DataSet中。 • 傳送或擷取參數資訊。 • 各種資料提供者會實作它們自己的命令類別: • SqlCommand 類別 • OleDbCommand 類別 • OdbcCommand 類別 • OracleCommand類別
Command 物件(3/3) • 當我們需要一個 Command 物件時,並不會直接建立 IDbCommand 介面的執行個體,而會建立繼承 IDbCommand 之類別的執行個體。 • 繼承 IDbCommand 的類別必須實作繼承而來的所有成員,而且通常會根據資料提供者的特性定義額外的成員以便加入該資料提供者所特有的功能。 • 例如,SqlCommand 類別額外定義了ExecuteXmlReader 方法。 • 為了促進 .NET Framework 資料提供者之間的一致性,請以 PrvClassname 的形式來命名繼承的類別,其中 Prv是指派給特定 .NET Framework 資料提供者之命名空間中所有類別的統一前置詞。
DataReader 物件(1/4) • DataReader 物件就是所謂的「資料讀取器」,它能夠自資料來源取得順向且唯讀的資料流。 • 提供了高效能的資料讀取方式。 • 適合單次且短時間的資料提取作業。 • 資料讀取器只能透過呼叫 Command 物件的 ExecuteReader方法來傳回,您不能直接個體化它。 • 存取 DataReader 物件時,資料庫連接會保持開啟狀態。
DataReader 物件(2/4) • .NET Framework 中並沒有一個名稱為 DataReader 的類別,而是各種資料提供者會實作它們自己的資料讀取器類別: • SqlDataReader 類別 • OleDbDataReader 類別 • OdbcDataReader 類別 • OracleDataReader 類別 • 資料提供者所實作的資料讀取器類別都直接衍生自 System.MarshalByRefObject 並實作相同的 IDataReader 介面。
DataReader 物件(4/4) • 當我們需要一個 DataReader 物件時,並不會直接建立 IDataReader 介面的執行個體,而會建立繼承 IDataReader 之類別的執行個體。 • 繼承 IDataReader 的類別必須實作繼承而來的所有成員,而且通常會根據資料提供者的特性定義額外的成員以便加入該資料提供者所特有的功能。 • 為了促進 .NET Framework 資料提供者之間的一致性,請以 PrvClassname 的形式來命名繼承的類別,其中 Prv是指派給特定 .NET Framework 資料提供者之命名空間中所有類別的統一前置詞。
DataAdapter 物件(1/2) • DataAdapter 物件就是所謂的「資料配接器」,它擔任 DataSet 物件與資料來源間的橋樑。 • DataAdapter 使用 Command 物件將SQL陳述式或預存程序執行於資料來源,以便把資料載入 DataSet 並可將 DataSet 中的資料變更寫回資料來源。 • 資料配接器公開下列兩個介面: • IDataAdapter • IDbDataAdapter
.NET Framework 資料提供者(1/2) • .NET Framework 1.1 內附下列四種 .NET Framework 資料提供者: • SQL Server .NET Framework 資料提供者 • OLE DB .NET Framework 資料提供者 • ODBC .NET Framework 資料提供者 • Oracle .NET Framework 資料提供者 • 欲使用某種 .NET Framework 資料提供者,請使用 Imports陳述式匯入該命名空間。
SQL Server .NET Framework 資料提供者(1/2) • 使用「表格資料流」(Tabular Data Stream,TDS)協定來與 SQL Server 通訊,由於 TDS 是 SQL Server 的原生通訊協定,不需要經由額外的 OLE DB 或 ODBC 層就能直接存取 SQL Server,因此不僅輕量化且效能極佳。
SQL Server .NET Framework 資料提供者(2/2) • SQL Server .NET Framework 資料提供者只能夠用來存取 Microsoft SQL Server 7.0 或更新的版本(例如:SQL Server 2000)。 • 必須安裝 Microsoft Data Access Components(MDAC)2.6 版或更新的版本。 • SQL Server .NET Framework 資料提供者的類別位於 System.Data.SqlClient命名空間中: • Imports System.Data.SqlClient
OLE DB .NET Framework 資料提供者(1/2) • 用來存取支援 OLE DB 介面的資料庫。 • 透過 COM Interop 來使用原生的 OLE DB 去存取資料庫並執行命令。 • 下列的 OLE DB 提供者已經被驗證過確實能夠使用於 ADO.NET 中: • SQLOLEDB-Microsoft OLE DB Provider for SQL Server。 • MSDAORA-Microsoft OLE DB Provider for Oracle。 • Microsoft.Jet.OLEDB.4.0-OLE DB Provider for Microsoft Jet。
OLE DB .NET Framework 資料提供者(2/2) • OLE DB .NET Framework 資料提供者不支援 OLE DB 2.5 版的介面: • Microsoft OLE DB Provider for Exchange • Microsoft OLE DB Provider for Internet Publishing • OLE DB .NET Framework 資料提供者無法用於 OLE DB Provider for ODBC(MSDASQL)。 • 必須安裝 MDAC 2.6 或更新的版本。 • OLE DB .NET Framework 資料提供者的類別位於 System.Data.OleDb命名空間中: • Imports System.Data.OleDb • 支援本機與分散式交易(Transaction)。
ODBC .NET Framework 資料提供者 • 透過 COM Interop 來使用原生的 ODBC 驅動程式管理員去存取資料庫。 • 以下所列的 ODBC 驅動程式已經被驗證過確實能夠使用於 ADO.NET 中: • SQL Server • Microsoft ODBC for Oracle • Microsoft Access Driver(*.mdb) • 必須安裝 MDAC 2.6 或更新的版本。建議使用 MDAC 2.7。 • ODBC .NET Framework 資料提供者的類別位於 System.Data.Odbc 命名空間中: • Imports System.Data.Odbc • 支援本機與分散式交易(Transaction)。
Oracle .NET Framework 資料提供者 • Oracle 用戶端連接軟體來存取 Oracle 資料來源。 • 必須安裝 Oracle 用戶端軟體 8.1.7 版或更新的版本。 • 必須同時參考 System.Data.dll與 System.Data.OracleClient.dll。 • Imports System.Data.OracleClient • 支援本機與分散式交易。 • 目前並不支援 EnlistDistributedTransaction 方法。
SQL Server .NET Framework 資料提供者的使用時機 • SQL Server .NET Framework 資料提供者的使用時機: • 如果您的應用程式是一個要存取 Microsoft SQL Server 7.0 或更新版本的中間階層應用程式,應該使用 SQL Server .NET Framework 資料提供者。 • 如果您的應用程式是一個要存取 MSDE、Microsoft SQL Server 7.0 或更新版本的單一階層應用程式,應該使用 SQL Server .NET Framework 資料提供者。 • 如果您使用的資料來源是 Microsoft SQL Server 6.5或更舊的版本,將不能使用 SQL Server .NET Framework 資料提供者,而必須配合 OLE DB .NET Framework 資料提供者來使用 OLE DB Provider for SQL Server。
OLE DB .NET Framework 資料提供者的使用時機 • 如果您的應用程式一個中間階層的應用程式,且要要存取 Microsoft SQL Server 6.5 或更舊的版本,亦或是要存取支援 OLE DB 介面的資料來源,請使用 OLE DB .NET Framework 資料提供者。 • 如果您的應用程式是一個要存取 Microsoft Access 資料庫的單一階層應用程式,請使用 OLE DB .NET Framework 資料提供者。
ODBC .NET Framework 資料提供者的使用時機 • 如果您的應用程式是一個要使用 ODBC 資料來源的中間階層應用程式,應該使用 ODBC .NET Framework 資料提供者。 • 如果您的應用程式是一個要使用 ODBC 資料來源的單一階層應用程式,應該使用 ODBC .NET Framework 資料提供者。
Oracle .NET Framework 資料提供者的使用時機 • 如果您的應用程式是一個要使用 Oracle 資料來源的中間階層應用程式,應該使用 Oracle .NET Framework 資料提供者。 • 如果您的應用程式是一個要使用 Oracle 資料來源的單一階層應用程式,應該使用 Oracle .NET Framework 資料提供者。
結束 • 下集主題:如何連接至資料來源。 • 再會