DataAdapter, DataTable, dan Pemetaan DataColumn

Sebuah DataAdapter mengandung kumpulan dari nol atau lebih objek DataTableMapping dalam properti TableMappingsnya. DataTableMapping menyediakan pemetaan utama antara data yang dikembalikan dari kueri terhadap sumber data dan DataTable. Nama DataTableMapping dapat diteruskan sebagai pengganti DataTable nama ke Fill metode DataAdapter. Contoh berikut membuat DataTableMapping bernama AuthorsMapping untuk tabel Authors.

workAdapter.TableMappings.Add("AuthorsMapping", "Authors")
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");

Fitur DataTableMapping memungkinkan Anda menggunakan nama kolom dalam DataTable yang berbeda dari nama kolom dalam database. DataAdapter menggunakan pemetaan untuk mencocokkan kolom saat tabel diperbarui.

Jika Anda tidak menentukan TableName atau DataTableMapping nama saat memanggil metode Fill atau Update dari DataAdapter, DataAdapter akan mencari DataTableMapping dengan nama "Table". Jika itu DataTableMapping tidak ada, TableName dari DataTable adalah "Tabel". Anda dapat menentukan default DataTableMapping dengan membuat DataTableMapping dengan nama "Tabel".

Contoh kode berikut membuat DataTableMapping (dari namespace System.Data.Common) dan menjadikannya pemetaan default untuk DataAdapter yang ditentukan dengan menamainya "Table". Contoh kemudian memetakan kolom dari tabel pertama dalam hasil kueri ( Customers tabel Northwind database) ke sekumpulan nama yang lebih mudah digunakan dalam tabel Pelanggan Northwind di DataSet. Untuk kolom yang tidak dipetakan, nama kolom dari sumber data digunakan.

Dim mapping As DataTableMapping = _
  adapter.TableMappings.Add("Table", "NorthwindCustomers")
mapping.ColumnMappings.Add("CompanyName", "Company")
mapping.ColumnMappings.Add("ContactName", "Contact")
mapping.ColumnMappings.Add("PostalCode", "ZIPCode")

adapter.Fill(custDS)
DataTableMapping mapping =
  adapter.TableMappings.Add("Table", "NorthwindCustomers");
mapping.ColumnMappings.Add("CompanyName", "Company");
mapping.ColumnMappings.Add("ContactName", "Contact");
mapping.ColumnMappings.Add("PostalCode", "ZIPCode");

adapter.Fill(custDS);

Dalam situasi yang lebih canggih, Anda mungkin memutuskan menginginkan DataAdapter yang sama untuk mendukung pemuatan tabel yang berbeda dengan pemetaan yang berbeda. Untuk melakukan ini, cukup tambahkan objek tambahan DataTableMapping .

Ketika sebuah metode menerima sebuah instance dari Fill dan sebuah nama DataSet, jika pemetaan dengan nama tersebut ada, maka pemetaan itu yang digunakan; jika tidak, DataTableMapping dengan nama tersebut yang digunakan.

Contoh berikut membuat DataTableMapping dengan nama Customers dan DataTable dengan nama BizTalkSchema. Contoh kemudian memetakan baris yang dikembalikan oleh pernyataan SELECT ke BizTalkSchemaDataTable.

Dim mapping As ITableMapping = _
  adapter.TableMappings.Add("Customers", "BizTalkSchema")
mapping.ColumnMappings.Add("CustomerID", "ClientID")
mapping.ColumnMappings.Add("CompanyName", "ClientName")
mapping.ColumnMappings.Add("ContactName", "Contact")
mapping.ColumnMappings.Add("PostalCode", "ZIP")

adapter.Fill(custDS, "Customers")
ITableMapping mapping =
  adapter.TableMappings.Add("Customers", "BizTalkSchema");
mapping.ColumnMappings.Add("CustomerID", "ClientID");
mapping.ColumnMappings.Add("CompanyName", "ClientName");
mapping.ColumnMappings.Add("ContactName", "Contact");
mapping.ColumnMappings.Add("PostalCode", "ZIP");

adapter.Fill(custDS, "Customers");

Catatan

Jika nama kolom sumber tidak disediakan untuk pemetaan kolom atau nama tabel sumber tidak disediakan untuk pemetaan tabel, nama default akan dibuat secara otomatis. Jika tidak ada kolom sumber yang disediakan untuk pemetaan kolom, pemetaan kolom diberi nama default yang meningkat secara bertahap sebagai SourceColumnN, dimulai dengan SourceColumn1. Jika tidak ada nama tabel sumber yang disediakan untuk pemetaan tabel, pemetaan tabel diberi nama SourceTable default N yang inkremental, dimulai dengan SourceTable1.

Catatan

Sebaiknya hindari konvensi penamaan SourceColumnN untuk pemetaan kolom, atau SourceTableN untuk pemetaan tabel, karena nama yang Anda berikan mungkin bertentangan dengan nama pemetaan kolom default yang ada di ColumnMappingCollection nama pemetaan tabel atau di DataTableMappingCollection. Jika nama yang diberikan sudah ada, pengecualian akan dilemparkan.

Menangani Beberapa Kumpulan Hasil

Jika Anda SelectCommand mengembalikan beberapa tabel, Fill secara otomatis menghasilkan nama tabel dengan nilai bertahap untuk tabel dalam Himpunan Data, dimulai dengan nama tabel yang ditentukan dan melanjutkan dalam formulir TableNameN, dimulai dengan TableName1. Anda bisa menggunakan pemetaan tabel untuk memetakan nama tabel yang dihasilkan secara otomatis ke nama yang ingin Anda tentukan untuk tabel di Himpunan Data. Misalnya, untuk SelectCommand yang mengembalikan dua tabel, Customers dan Pesanan, terbitkan panggilan berikut ke Isi.

adapter.Fill(customersDataSet, "Customers")
adapter.Fill(customersDataSet, "Customers");

Dua tabel dibuat di Himpunan Data: Customers dan Pelanggan1. Anda dapat menggunakan pemetaan tabel untuk memastikan bahwa tabel kedua diberi nama Orders , bukan Pelanggan1. Untuk melakukan ini, petakan tabel sumber Pelanggan1 ke DataSet tabel Pesanan, seperti yang diperlihatkan dalam contoh berikut.

adapter.TableMappings.Add("Customers1", "Orders")
adapter.Fill(customersDataSet, "Customers")
adapter.TableMappings.Add("Customers1", "Orders");
adapter.Fill(customersDataSet, "Customers");

Lihat juga