Bagikan melalui


Pemetaan DataAdapter, DataTable, dan DataColumn

Berlaku untuk: .NET Framework .NET .NET Standard

Mengunduh ADO.NET

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

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.

Catatan

Jika Anda tidak menentukan TableName atau nama DataTableMapping saat memanggil metode Fill atau Update dari DataAdapter, DataAdapter mencari DataTableMapping bernama "Tabel". TableName dari DataTable adalah "Tabel" jika DataTableMapping tidak ada. 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.

// Assumes that connection is a valid SqlConnection object.
DataSet custDataSet = new DataSet();

SqlDataAdapter custAdapter = new SqlDataAdapter(
    "SELECT * FROM dbo.Customers", connection);

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

custAdapter.Fill(custDataSet);

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, 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 BizTalkSchema DataTable.

// Assumes that connection is a valid SqlConnection object.
DataSet custDataSet = new DataSet();

SqlDataAdapter custAdapter = new SqlDataAdapter(
    "SELECT * FROM dbo.Customers", connection);

// The DataTableMapping is implemented ITableMapping.
ITableMapping mapping =
    custAdapter.TableMappings.Add("Table", "BizTalkSchema");
mapping.ColumnMappings.Add("CustomerID", "ClientID");
mapping.ColumnMappings.Add("CompanyName", "ClientName");
mapping.ColumnMappings.Add("ContactName", "Contact");
mapping.ColumnMappings.Add("PostalCode", "ZIP");

custAdapter.Fill(custDataSet);

Catatan

Jika nama kolom sumber tidak disediakan untuk pemetaan kolom, nama default akan dibuat secara otomatis. Pemetaan kolom diberikan nama default tambahan sourceColumn N, dimulai dengan SourceColumn1 jika tidak ada kolom sumber yang disediakan untuk pemetaan kolom.

Catatan

Jika nama tabel sumber tidak disediakan untuk pemetaan tabel, nama default akan dibuat secara otomatis. Pemetaan tabel diberi nama default tambahan dari SourceTable N, dimulai dengan SourceTable1 jika tidak ada nama tabel sumber yang disediakan untuk pemetaan tabel.

Catatan

Sebaiknya hindari konvensi penamaan SourceColumn N untuk pemetaan kolom, atau SourceTable N 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 tataan 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 TableName N, 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");

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 Data Pesanan, seperti yang ditunjukkan pada contoh berikut.

// Assumes that connection is a valid SqlConnection object.
string queryString =
"SELECT * FROM dbo.Customers; SELECT * FROM dbo.Orders;";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

DataSet customersDataSet = new DataSet();

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

Lihat juga