Bagikan melalui


Menambahkan batasan yang ada ke Himpunan Data

Berlaku untuk: .NET Framework .NET .NET Standard

Mengunduh ADO.NET

Metode Fill SqlDataAdapter mengisi DataSet hanya dengan kolom tabel dan baris dari sumber data; meskipun batasan umumnya diatur oleh sumber data, metode Isian tidak menambahkan informasi skema ini ke Himpunan Data secara default.

Untuk mengisi Himpunan Data dengan informasi batasan kunci utama yang ada dari sumber data, Anda dapat memanggil FillSchema metode DataAdapter, atau mengatur MissingSchemaAction properti DataAdapter ke AddWithKey sebelum memanggil Isi. Ini akan memastikan bahwa batasan kunci utama dalam DatSet mencerminkan batasan di sumber data.

Catatan

Informasi batasan kunci asing tidak disertakan dan harus dibuat secara eksplisit.

Menambahkan informasi skema ke Himpunan Data sebelum mengisinya dengan data memastikan bahwa batasan kunci primer disertakan dengan DataTable objek di Himpunan Data. Akibatnya, ketika panggilan tambahan untuk mengisi Himpunan Data dibuat, informasi kolom kunci utama digunakan untuk mencocokkan baris baru dari sumber data dengan baris saat ini di setiap DataTable, dan baris saat ini data dalam tabel ditimpa dengan data dari sumber data. Tanpa informasi skema, baris baru dari sumber data ditambahkan ke Himpunan Data, menghasilkan baris duplikat.

Catatan

Jika kolom dalam sumber data diidentifikasi sebagai peningkatan otomatis, FillSchema metode, atau Fill metode dengan MissingSchemaAction AddWithKey, membuat DataColumn dengan properti AutoIncrement diatur ke true. Namun, Anda harus mengatur nilai AutoIncrementStep dan AutoIncrementSeed sendiri.

Catatan

Menggunakan FillSchema atau mengatur MissingSchemaAction ke AddWithKey memerlukan pemrosesan ekstra di sumber data untuk menentukan informasi kolom kunci utama. Pemrosesan tambahan ini dapat menghambat performa. Jika Anda mengetahui informasi kunci utama pada waktu desain, kami sarankan Anda secara eksplisit menentukan kolom atau kolom kunci utama untuk mencapai performa optimal.

Contoh kode berikut menunjukkan cara menambahkan informasi skema ke Himpunan Data menggunakan FillSchema:

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

Contoh kode berikut menunjukkan cara menambahkan informasi skema ke Himpunan MissingSchemaAction Data menggunakan properti dan Fill metode :

// 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"]);
}

Menangani beberapa kumpulan hasil

Jika DataAdapter memenuhi beberapa kumpulan hasil yang dikembalikan dari SelectCommand, data akan membuat beberapa tabel di Himpunan Data. Tabel akan diberi nama default inkremental berbasis nol tabel N, dimulai dengan Tabel alih-alih "Table0". Tabel akan diberi nama inkremental berbasis nol TableName N, dimulai dengan TableName alih-alih "TableName0" jika nama tabel diteruskan sebagai argumen ke FillSchema metode .

Lihat juga