Aracılığıyla paylaş


DataAdapter DataTable ve DataColumn Eşlemeleri

Bir DataAdapter, TableMappings özelliğinde sıfır veya daha fazla DataTableMapping nesneden oluşan bir koleksiyon içerir. , DataTableMapping bir sorgudan döndürülen veriler ile bir veri kaynağı DataTablearasında birincil eşleme sağlar. "DataTableMapping adı, DataTable adı yerine FillDataAdapter yöntemine geçirilebilir." Aşağıdaki örnek, Authors tablosu için AuthorsMapping adlı bir DataTableMapping oluşturur.

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

A DataTableMapping , veritabanındakilerden farklı olan sütun DataTable adlarını kullanmanıza olanak tanır. , DataAdapter tablo güncelleştirildiğinde sütunları eşleştirmek için eşlemeyi kullanır.

TableName veya DataTableMapping adı belirtmediğinizde, DataAdapter'ın Fill veya Update yöntemini çağırırken, "Tablo" adında bir DataAdapter arar. Eğer DataTableMapping bulunmuyorsa, TableName öğesinin DataTable'si "Tablo" olur. "Tablo" adıyla bir DataTableMapping oluşturarak varsayılan DataTableMapping değeri belirtebilirsiniz.

Aşağıdaki kod örneği, System.Data.Common ad alanından bir DataTableMapping oluşturur ve bunu "Tablo" olarak adlandırarak belirtilen DataAdapter için varsayılan eşleme yapar. Örnek daha sonra sorgu sonucundaki ilk tablodaki sütunları ( Customers veritabanının Northwind tablosu) içindeki Northwind Customers tablosundaki daha kolay bir ad kümesiyle DataSeteşler. Eşlenmeyen sütunlar için veri kaynağındaki sütunun adı kullanılır.

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);

Daha gelişmiş durumlarda, farklı eşlemelere sahip farklı tabloların yüklenmesini desteklemek için aynı DataAdapter kullanmak istediğinize karar verebilirsiniz. Bunu yapmak için ek DataTableMapping nesneler eklemeniz yeterlidir.

Fill yöntemine bir DataSet örneği ve bir DataTableMapping adı geçirildiğinde, bu ada sahip bir eşleme varsa, bu eşleme kullanılır; aksi halde, bu ada sahip bir DataTable kullanılır.

Aşağıdaki örnekler, Customers adında bir DataTableMapping ve BizTalkSchema adında bir DataTable oluşturur. Örnek daha sonra SELECT deyimi tarafından döndürülen satırları BizTalkSchema ile eşler.

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");

Not

Sütun eşlemesi için kaynak sütun adı sağlanmazsa veya tablo eşlemesi için kaynak tablo adı sağlanmazsa, varsayılan adlar otomatik olarak oluşturulur. Sütun eşlemesi için kaynak sütun sağlanmazsa, sütun eşlemesine SourceColumn başlayarak artımlı varsayılan N adı verilir. Tablo eşlemesi için kaynak tablo adı sağlanmazsa, tablo eşlemesine SourceTable başlayarak artımlı varsayılan N adı verilir.

Not

Sağladığınız ad SourceColumn veya tablo eşleme adında varolan bir varsayılan sütun eşleme adıyla çakışabileceğinden, sütun eşlemesi için SourceTable veya tablo eşlemesi için ColumnMappingCollection adlandırma kuralından kaçınmanızı öneririz. Sağlanan ad zaten varsa, bir özel durum oluşturulur.

Birden Çok Sonuç Kümesini İşleme

Eğer SelectCommand birden fazla tablo döndürürse, Fill tablolar için DataSet içinde, belirtilen tablo adıyla başlayarak ve N biçiminde artan değerlerle, TableName ile başlayıp devam eden tablo adlarını otomatik olarak oluşturur. Otomatik olarak oluşturulan tablo adını DataSet'teki tablo için belirtilen adla eşlemek için tablo eşlemelerini kullanabilirsiniz. Örneğin, iki tablo, Customers ve Siparişler döndüren bir SelectCommand için Fill fonksiyonuna aşağıdaki çağrıyı yapın.

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

DataSet'te iki tablo oluşturulur: Customers ve Müşteriler1. İkinci tablonun Orders yerine adlandırılmasını sağlamak için tablo eşlemelerini kullanabilirsiniz. Bunu yapmak için, aşağıdaki örnekte gösterildiği gibi Customers1'inDataSet kaynak tablosunu Siparişler tablosuyla eşleyin.

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

Ayrıca bkz.