資料配接器中的資料表對應
更新:2007 年 11 月
當資料配接器從資料來源讀取資料時,它會使用資料表對應來判斷要將資料置放在一或多個對應資料集資料表的哪個位置。對應會連結來源中與資料集資料表中的資料行名稱。例如,來自資料來源中名為 au_id 的資料行的資訊,可能會置放在資料集資料表中名為 author_id_number 的資料行。
注意事項: |
---|
在舊版本的 Visual Studio 中,資料配接器用於應用程式和資料庫之間的通訊。雖然資料配接器仍然是 .NET Framework 資料提供者 (ADO.NET) 的主要元件,但 TableAdapter 是設計工具產生的元件,它可以簡化在應用程式和資料庫之間的資料移動程序。如需使用 TableAdapter 的詳細資訊,請參閱 TableAdapter 概觀。 |
當您使用 Visual Studio 工具從資料來源中的資訊產生資料集時,資料集項目的名稱必須與來源相同。但有時資料來源中與資料集當中的名稱會不相符,這些情況可能是:
從使用不同名稱的現有結構描述建立資料集。
您想要變更資料集當中的資料項目名稱,以達到方便使用、增加可讀性、與外國語言之間的轉譯,或是其他原因。
在您從配接器產生資料集時,會希望能控制具型別資料成員的名稱。
資料表對應結構
資料表對應是使用配接器的 TableMappings 屬性所建立的,而這個屬性屬於 DataTableMapping 型別的項目集合。每個對應的資料表集都有一個 DataTableMapping 物件。一般來說,這類項目只有一個,因為配接器通常只與單一來源資料表和單一資料集資料表有關聯(但是預存程序可傳回多個資料列集,在這種情況下,第二個以及後續資料表會使用 TableMappings 集合當中的第二個及後續對應來進行對應)。
接下來,每個對應項目會包含屬性,以便識別資料來源資料表、資料集資料表和 ColumnMappings 屬性 (包含代表實質對應的項目)。
資料表對應的行為
當您呼叫資料配接器的 Fill 方法時,配接器會透過下列程序來判斷在資料集的哪個位置寫入資料:
配接器會查閱 TableMappings 物件當中的每個來源資料行名稱。
當配接器找到來源資料行名稱時,它會為資料集資料表當中的對應資料行取得相符 (對應) 的名稱。
使用在步驟 2 取得的名稱,配接器將資料從來源資料行寫入對應的資料集資料行。
有幾個條件會使配接器無法依循上述處理過程。兩個主要情形分別是:
找不到來源資料行的對應。這可能是因為未針對 TableMappings 屬性定義任何內容,或是因為未對應特定的資料行。
無論是否在 TableMappings 屬性中對應,要寫入的資料行並未在資料集的結構描述當中定義。
配接器支援兩種屬性,允許您在發生以上任一狀況時指定處理方式。以上狀況並不一定是錯誤條件,因為即使發生任一狀況,配接器還是能夠填滿資料集。
MissingMappingAction 屬性可讓您指定配接器在遺漏對應時所應採取的動作。可能的設定有:
Passthrough:配接器嘗試將資料行載入到同名的資料集資料行內。如果沒有這個名稱的資料集資料行,此行為就會依照 MissingSchemaAction 列舉型別設定 (請參考下面)。
Ignore:未適當對應的資料行將不會載入到資料集中。
Error:引發錯誤。
MissingSchemaAction 屬性可讓您在配接器嘗試將資料寫入未在資料集結構描述中定義的資料行時,指定應該發生的事情。可能值為:
Add:將資料表或資料行加入至結構描述和資料集。
AddWithKey:將資料表或資料行連同主索引鍵的資訊,一起加入至資料集和結構描述。
Ignore:未在資料集結構描述當中表示的資料表或資料行不會加入至資料集。
Error:配接器引發錯誤。
通常您會結合設定兩屬性以符合您應用程式的特定需求。將 MissingMappingAction 屬性設定為 Passthrough 並將 MissingSchemaAction 屬性設定為 Add 時,會自動從資料集的來源複製資料表和資料行名稱。
相反地,您可能會因資料集結構描述的定義嚴格而在應用程式當中指定錯誤檢查。在這種情況下,若從來源取得資料,但在資料集當中沒有清楚定義的目標 (Target) 資料行,可能會造成違反商務規則 (Business Rule) 或是其他錯誤。
當您想確定載入至資料集的唯一資料已在結構描述中明確定義,或在 TableMappings 屬性中對應時,您可指定 Ignore。如果配接器呼叫的預存程序或 SQL 陳述式會傳回超出資料集當中您所需的資料行時,這種做法就相當有用。
請參閱
工作
概念
從 DataAdapter 填入 DataSet (ADO.NET)