Bagikan melalui


DataAdapter DataTable dan Pemetaan DataColumn

DataAdapter berisi kumpulan nol atau lebih objek DataTableMapping dalam properti TableMappings-nya . DataTableMapping menyediakan pemetaan utama antara data yang dikembalikan dari kueri terhadap sumber data, dan DataTable. Nama DataTableMapping dapat diteruskan sebagai pengganti nama DataTable ke metode Fill dari DataAdapter. Contoh berikut membuat DataTableMapping bernama AuthorsMapping untuk tabel Penulis .

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

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

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

Contoh kode berikut membuat DataTableMapping (dari System.Data.Common namespace layanan) dan menjadikannya pemetaan default untuk DataAdapter yang ditentukan dengan menamainya "Tabel". Contoh kemudian memetakan kolom dari tabel pertama dalam hasil kueri (tabel Pelanggan database Northwind ) 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 dapat memutuskan bahwa Anda ingin DataAdapter yang sama mendukung pemuatan tabel yang berbeda dengan pemetaan yang berbeda. Untuk melakukan ini, cukup tambahkan objek DataTableMapping tambahan.

Ketika metode Isian diteruskan instans Himpunan Data dan nama DataTableMapping, jika pemetaan dengan nama tersebut ada, itu digunakan; jika tidak, DataTable dengan nama tersebut digunakan.

Contoh berikut membuat DataTableMapping dengan nama Pelanggan dan DataTable 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 tambahan SourceColumnN, dimulai dengan SourceColumn1 . Jika tidak ada nama tabel sumber yang disediakan untuk pemetaan tabel, pemetaan tabel diberi nama default tambahan SourceTableN, dimulai dengan SourceTable1.

Catatan

Kami menyarankan agar Anda menghindari 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 atau nama pemetaan tabel di DataTableMappingCollection. Jika nama yang diberikan sudah ada, pengecualian akan dilemparkan.

Menangani Beberapa Kumpulan Hasil

Jika SelectCommand Anda mengembalikan beberapa tabel, Isi secara otomatis menghasilkan nama tabel dengan nilai bertahap untuk tabel di 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, Pelanggan dan Pesanan, terbitkan panggilan berikut ke Fill.

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

Dua tabel dibuat di Himpunan Data: Pelanggan dan Pelanggan1. Anda dapat menggunakan pemetaan tabel untuk memastikan bahwa tabel kedua diberi nama Pesanan , bukan Pelanggan1. Untuk melakukannya, petakan tabel sumber Pelanggan1 ke tabel Himpunan DataPesanan, seperti yang ditunjukkan pada contoh berikut.

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

Lihat juga