Aracılığıyla paylaş


DataSet'e mevcut kısıtlamaları ekleme

Şunlar için geçerlidir: .NET Framework .NET .NET Standard

ADO.NET indirin

Fill yöntemi SqlDataAdapter yalnızca bir DataSet veri kaynağındaki tablo sütunlarını ve satırlarını doldurur; kısıtlamalar genellikle veri kaynağı tarafından ayarlansa da, Fill yöntemi bu şema bilgilerini varsayılan olarak DataSet'e eklemez.

DataSet'i bir veri kaynağından gelen birincil anahtar kısıtlama bilgileriyle doldurmak için FillSchema yöntemini çağırabilir veya MissingSchemaAction çağırmadan önce DataAdapter özelliğini AddWithKey olarak ayarlayabilirsiniz. Bu, DataSet'teki birincil anahtar kısıtlamalarının veri kaynağındakileri yansıtmasını sağlar.

Uyarı

Yabancı anahtar kısıtlama bilgileri dahil değildir ve açıkça oluşturulmalıdır.

DataSet'i verilerle doldurmadan önce şema bilgilerini eklemek, birincil anahtar kısıtlamalarının DataTableDataSet'teki nesnelere dahil edilmesini sağlar. Sonuç olarak, DataSet'i doldurmak için ek çağrılar yapıldığında, veri kaynağındaki yeni satırları her DataTable'daki geçerli satırlarla eşleştirmek için birincil anahtar sütun bilgileri kullanılır ve tablolardaki geçerli verilerin üzerine veri kaynağındaki verilerle yazılır. Şema bilgileri olmadan, veri kaynağındaki yeni satırlar DataSet'e eklenir ve yinelenen satırlar elde edilir.

Uyarı

Veri kaynağından bir sütun otomatik artırma olarak tanımlanmışsa, FillSchema yöntemi veya FillMissingSchemaAction ile kullanılan yöntemi, AutoIncrement olarak ayarlanmış bir DataColumn oluşturur. Ancak AutoIncrementStep ve AutoIncrementSeed değerlerini kendiniz ayarlamanız gerekir.

Uyarı

FillSchema'nın kullanılması veya MissingSchemaActiondeğerinin AddWithKey olarak ayarlanması, birincil anahtar sütun bilgilerini belirlemek için veri kaynağında ek işleme gerektirir. Bu ek işleme performansı engelleyebilir. Tasarım zamanında birincil anahtar bilgilerini biliyorsanız, en iyi performansı elde etmek için birincil anahtar sütununu veya sütunlarını açıkça belirtmenizi öneririz.

Aşağıdaki kod örneğinde kullanılarak FillSchema şema bilgilerinin nasıl ekleneceği gösterilmektedir:

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

DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");

Aşağıdaki kod örneği, özelliğini ve yöntemini kullanarak MissingSchemaActionFill şema bilgilerinin nasıl ekleneceğini gösterir:

// Assumes that customerConnection and orderConnection are valid SqlConnection objects.
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", customerConnection);
SqlDataAdapter ordAdapter = new SqlDataAdapter(
"SELECT * FROM Orders", orderConnection);

DataSet customerOrders = new DataSet();

custAdapter.Fill(customerOrders, "Customers");
ordAdapter.Fill(customerOrders, "Orders");

DataRelation relation = customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);

foreach (DataRow pRow in customerOrders.Tables["Customers"].Rows)
{
    Console.WriteLine(pRow["CustomerID"]);
    foreach (DataRow cRow in pRow.GetChildRows(relation))
        Console.WriteLine("\t" + cRow["OrderID"]);
}

Birden çok sonuç kümesini işleme

DataAdapter dosyasından SelectCommanddöndürülen birden çok sonuç kümesini karşılıyorsa DataSet'te birden çok tablo oluşturur. Tablolar, "Tablo0" yerine, "Tablo"dan başlayarak TabloN şeklinde sıfır tabanlı artan bir varsayılan ad alacaktır. Tablo adı yönteme bağımsız değişken olarak geçirilirse tablolara "TableName0" yerine TableName ile başlayarak TableName FillSchema sıfır tabanlı artımlı bir ad verilir.

Ayrıca bakınız