DataAdapter DataTable ve DataColumn Eşlemeleri

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 DataAdapter'ın Fill yöntemine geçirilebilir. Aşağıdaki örnek, Yazarlar tablosu için AuthorsMapping adlı bir DataTableMapping oluşturur.

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

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

DataAdapter'ın Fill veya Update yöntemini çağırırken TableName veya DataTableMapping adı belirtmezseniz, DataAdapter "Table" adlı bir DataTableMapping arar. Bu DataTableMapping yoksa, DataTable'ın TableName'i "Table" olur. "Tablo" adıyla bir DataTableMapping oluşturarak varsayılan bir DataTableMapping belirtebilirsiniz.

Aşağıdaki kod örneği bir DataTableMapping ( System.Data.Common ad alanından) 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ı (Northwind veritabanının Müşteriler tablosu) içindeki Northwind Müşterileri tablosundaki daha kullanıcı dostu adlar 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, aynı DataAdapter'ın farklı eşlemelerle farklı tabloların yüklenmesini desteklemesini istediğinize karar vekleyebilirsiniz. Bunu yapmak için ek DataTableMapping nesneleri eklemeniz yeterlidir.

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

Aşağıdaki örneklerde, Customers ve DataTable adı BizTalkSchema olan bir DataTableMapping oluşturulur. Örnek daha sonra SELECT deyimi tarafından döndürülen satırları BizTalkSchema DataTable 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 SourceColumn1'den başlayarak SourceColumn N artımlı varsayılan adı verilir. Tablo eşlemesi için kaynak tablo adı sağlanmazsa, tablo eşlemesine SourceTable1'den başlayarak SourceTable N artımlı varsayılan adı verilir.

Not

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

Birden Çok Sonuç Kümesini İşleme

SelectCommand'ınız birden çok tablo döndürüyorsa, Fill belirtilen tablo adıyla başlayıp TableName1'den başlayarak TabloAdı N biçiminde devam ederek DataSet'teki tablolar için artımlı değerlerle 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, Müşteriler ve Siparişler adlı iki tablo döndüren bir SelectCommand için, Doldurma için aşağıdaki çağrıyı yapın.

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

DataSet'te iki tablo oluşturulur: Müşteriler ve Müşteriler1. İkinci tablonun Müşteriler1 yerine Siparişler olarak 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'in kaynak tablosunu DataSet tablosu Orders ile eşleyin.

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

Ayrıca bkz.