共用方式為


資料配接器簡介

更新:2007 年 11 月

資料配接器是 ADO.NET Managed 提供者中不可或缺的一部分,也是用來在資料來源與資料集之間進行通訊的物件集合 (除配接器外,Managed 提供者還包含連接物件、資料讀取器物件和命令物件)。配接器會用來在資料來源與資料集之間交換資料。在許多應用程式中,這表示從資料庫將資料讀入資料集,以及之後將變更的資料從資料集寫回資料庫。但資料配接器可在任何來源與資料集之間移動資料。例如,可能有配接器會在 Microsoft Exchange 伺服器與資料集之間移動資料。

注意事項:

在舊版本的 Visual Studio 中,資料配接器用於應用程式和資料庫之間的通訊。雖然資料配接器仍然是 .NET Framework 資料提供者 (ADO.NET)的主要元件,但 TableAdapter 是設計工具產生的元件,它可以簡化在應用程式和資料庫之間的資料移動程序。如需使用 TableAdapter 的詳細資訊,請參閱 TableAdapter 概觀

一般來說,配接器經過設定後可讓您指定要將哪些資料移出及移入資料集。這通常會以被叫用 (Invoke) 來讀取或寫入資料庫的 SQL 陳述式或預存程序之參考的方式完成。

Visual Studio 有以下的資料配接器可搭配資料庫使用:

  • OleDbDataAdapter 物件適用於由 OLE DB 提供者所公開的任何資料來源。

  • SqlDataAdapter 物件則是 SQL Server 專用。由於它不必透過 OLE DB 層,因此要比 OleDbDataAdapter 類別快。但它只能用於 SQL Server 7.0 或更新版本。

  • OdbcDataAdapter 物件是存取 ODBC 資料來源的最佳選擇。

  • OracleDataAdapter 物件是存取 Oracle 資料庫的最佳選擇。

    注意事項:

    資料配接器、資料連接、資料命令和資料讀取器是構成 .NET Framework 資料提供者的元件。Microsoft 和協力廠商提供者可能會提供其他可整合至 Visual Studio 的 .NET Framework 資料提供者。如需不同 .NET Framework 資料提供者的詳細資訊,請參閱 .NET Framework 資料提供者 (ADO.NET)

您可以使用以下 .NET Framework Managed 提供者命名空間的部分來建立並操作配接器。

SqlClient Managed 提供者命名空間

系統資料 SQL 命名空間

OleDb Managed 提供者命名空間

SystemDataADOnamespace 圖形

一般來說,每個資料配接器都是在資料集當中的單一資料來源資料表與單一 DataTable 物件之間交換資料。如果資料集包含多個資料表,則通常的做法是由多個資料配接器提供資料給資料集,接著再將其資料寫回個別資料來源資料表。

當您要填入資料集中的資料表時,您可以呼叫執行 SQL 陳述式或預存程序的配接器方法。配接器會建立資料讀取器物件 (SqlDataReaderOleDbDataReaderOdbcDataReaderOracleDataReader),將資料讀入資料集。

注意事項:

您可以從資料庫讀取資料而無須將其儲存在資料集當中,這在使用唯讀資料的情況下是相當有效率的做法。如需詳細資訊,請參閱以下的「唯讀資料」。您也可以直接執行 SQL 陳述式,而不使用它們來填入資料集。如需詳細資訊,請參閱命令和參數 (ADO.NET)

同樣地,當您要更新資料庫時,您可以叫用呼叫適當 SQL 陳述式或預存程序的配接器方法,以便實際在資料庫中進行更新。

資料配接器和相關資料表

在資料集當中具有個別資料表,意思是資料配接器通常不會參考用來聯結 (Join) 資料表的 SQL 命令或預存程序。而是來自相關資料表的資訊分別由不同的配接器讀入資料集當中。接著使用 DataRelation 物件來管理資料集資料表之間的條件約束 (例如串聯更新),並允許您在相關的主資料錄與子資料錄之間巡覽。

例如,假設您要使用 Northwind 資料庫中 Customers 和 Orders 兩個相關聯的資料表。您不需要指定聯結來將兩個資料表結合在單一的結果集當中,這時最常見的作法是定義兩個配接器,一個用來填入資料集當中的 Customers 資料表,第二個配接器則是用來將 Order 資料錄讀入不同的資料集資料表當中。個別配接器可能包含選取準則來限制資料資料表當中的資料錄數量。

您也可以在資料集當中定義 DataRelation 物件,指定訂單資料錄與客戶資料錄是透過 CustomerID 欄位產生關聯。您還是可以個別管理資料表,而如果在從資料來源擷取資料錄之前就將資料表聯結,就無法這麼做。在要使用相關之資料錄的情況下,您可以叫用 DataRelation 物件的屬性和方法。

如需資料關聯的詳細資訊,請參閱資料集中的關聯性

連接物件

資料配接器需要與資料來源開放連接,以便讀取和寫入資料。因此,配接器會使用連接物件 (SqlConnectionOleDbConnectionOdbcConnectionOracleConnection),與資料來源進行通訊 (配接器最多可以有四個連接參考,分別用來執行選取、更新、插入和刪除的動作)。

以下表格列出 [工具箱] 中 [資料] 索引標籤的連接物件:

連接物件

說明

SqlConnection

和 SQL Server 7.0 (含) 以後版本資料庫的連接。

OleDbConnection

和任何 OLE DB 資料來源的連接。

OdbcConnection

和 OLE DB 資料來源的連接。

OracleConnection

和 Oracle 資料庫的連接。

在所有的情況下,連接物件都是資料來源內唯一的工作階段 (Session)。所有的連接物件均提供屬性,用來建立和修改連接的詳細資料 (如使用者同時也將提供您開始、認可和復原資料庫交易的方法。如需連接物件的詳細資訊,請參閱連接至資料來源 (ADO.NET)

安全性注意事項:

儲存敏感性資訊 (例如伺服器名稱、使用者名稱和密碼) 可能會影響應用程式安全性。使用 Windows 驗證 (也稱為整合式安全性) 是控制資料庫存取的一個更安全之方式。

ADO.NET 命令物件

使用配接器,您可以讀取、加入、更新和刪除資料來源當中的資料錄。為了讓您能夠指定這些作業的執行方式,配接器支援下列四個屬性:

  • SelectCommand – 從資料存放區擷取資料列的命令 (SQL 陳述式或預存程序名稱) 參考。

  • InsertCommand – 將資料列插入資料存放區的命令參考。

  • UpdateCommand – 修改資料存放區中資料列的命令參考。

  • DeleteCommand – 從資料存放區刪除資料列的命令參考。

這些屬性本身就是物件,它們是 SqlCommandOleDbCommandOdbcCommandOracleCommand 類別的執行個體。這些物件支援的 CommandText 屬性,包含對 SQL 陳述式或預存程序的參考。

注意事項:

命令類別必須與連接類別符合。例如,如果您使用 SqlConnection 物件來與 SQL Server 通訊,您也必須使用衍生自 SqlCommand 類別的命令。

雖然可以明確設定命令物件的文字,但您不一定需要這麼做;在許多情況下,Visual Studio 會產生需要的 SQL 陳述式。除此之外,如果未指定 UpdateCommand、InsertCommand 或 DeleteCommand 物件,配接器也能夠在執行階段時自動產生適當的 SQL 陳述式。如需詳細資訊,請參閱使用 CommandBuilders 產生命令 (ADO.NET)

但若要進一步直接控制執行命令的方式,您可以在設計階段和執行階段操作命令物件。例如,您可以在執行之前建立或修改與 SelectCommand 物件相關的命令。

您也可以不依賴資料配接器而自行執行命令。這允許您透過資料配接器傳遞自定 SQL 命令,例如用來定義或修改資料庫定義的命令。您也可以直接呼叫不會傳回資料錄集的預存程序,例如配合資料庫驗證使用者項目的預存程序。如需詳細資訊,請參閱執行命令 (ADO.NET)

安全性注意事項:

使用 CommandType 屬性為 Text 的資料命令時,請先仔細檢查用戶端傳送出來的資訊,然後再將這些資訊傳遞至您的資料庫。惡意使用者會嘗試傳送 (插入) 修改過或額外的 SQL 陳述式,以獲取未經授權的存取權,或損壞資料庫。在將使用者輸入傳輸到資料庫之前,一定要確認資訊是有效的;最好的做法是盡可能使用參數型查詢或預存程序。如需詳細資訊,請參閱指令碼攻擊概觀

命令參數

資料配接器當中的命令通常是參數驅動的。例如,SelectCommand 屬性的命令通常在其 WHERE 子句中具有參數,讓您能夠指定在執行階段時要從資料庫取得哪些資料錄。其他命令所使用的參數則允許您在執行階段傳遞要寫入資料錄的資料,以及要在資料庫中更新的資料錄。如需資料配接器中參數使用方式的詳細資訊,請參閱資料配接器命令中的參數

利用資料配接器讀取和更新

資料配接器的主要目的是用來在資料存放區與資料集之間傳輸資料。配接器支援特定方法以便在兩者之間來回移動資料。

注意事項:

如果您只是要讀取資料 (而非更新),您就不需要將資料儲存在資料集當中。而是可以直接從資料庫讀出和讀入應用程式。如需詳細資訊,請參閱以下的「唯讀資料」。

您可以使用資料配接器來執行下列作業:

  • 從資料存放區擷取資料列,並放入資料集中對應的資料表。

    若要將資料列擷取至資料集,請使用資料配接器物件 (SqlDataAdapterOleDbDataAdapterOdbcDataAdapterOracleDataAdapter) 上的 Fill 方法。當您叫用 Fill 方法時,該方法會將 SQL SELECT 陳述式傳送至資料存放區。

  • 將資料集資料表的變更傳送至對應的資料存放區。

    若要將資料集的資料集資料表傳送至資料存放區,請使用配接器的 Update 方法。當您叫用方法時,它會根據受影響之資料錄是新增的、變更的或刪除的,來執行任何必要的 SQL INSERT、UPDATE 或 DELETE 陳述式。

    如需如何使用資料配接器執行更新的詳細資訊,請參閱以 DataAdapter 更新資料來源 (ADO.NET)

唯讀資料

如果您的程式需要透過查詢結果執行循序且唯讀的傳遞,可以使用資料讀取器物件來代替填滿資料集的方式。資料讀取器物件會從資料來源擷取資料,並將其直接傳遞至您的應用程式。一般來說,當您不需要快取資料集當中的資料時,就可使用資料讀取器物件來進行唯讀、順向的資料存取 (資料配接器本身會使用資料讀取器物件來填入資料集)。範例之一是顯示資料庫資訊的 Web 表單網頁,由於 Web 表單網頁是利用每次往返來重新建立,因此將資料儲存在資料集當中通常不是有用的做法。

Visual Studio 提供四個資料讀取器物件:SqlDataReaderOleDbDataReaderOdbcDataReaderOracleDataReader。如需使用資料讀取器物件進行有效唯讀存取的詳細資訊,請參閱DataAdapter 和 DataReader (ADO.NET)

資料表對應

當您使用 Visual Studio 工具從資料庫資料表產生資料集時,資料集中之資料表和資料行的名稱依預設是與資料庫中的相同。但您可能會覺得這並不實用。例如,您可能會發現資料庫中所使用的名稱太過簡短或太過繁複,或是可能使用外國語言的名稱。如果您使用現有的結構描述 (Schema),您可能也會發現結構描述中定義的名稱與您資料庫中所使用的名稱不相符。

因此,資料庫中與資料集中的名稱不一定要相符。您可以在資料集命令中建立新的資料表和資料行名稱,然後將這些名稱對應至資料庫中所使用的名稱。配接器會使用 TableMappings 集合來維護資料集結構 (資料的資料表和資料行) 與資料存放區結構 (資料表和資料行) 之間的對應。如需資料表對應的詳細資訊,請參閱資料配接器中的資料表對應

請參閱

工作

HOW TO:為資料配接器設定參數

HOW TO:將資料來源的資料行對應至資料集資料表的資料行

概念

從 DataAdapter 填入 DataSet (ADO.NET)

資料的新功能

使用 Visual Studio 建立資料應用程式

其他資源

DataAdapter 和 DataReader (ADO.NET)

建立資料配接器

資料逐步解說

ADO.NET