如何添加ADO.NET數(shù)據(jù)集約束
學(xué)習(xí)ADO.NET時(shí),你可能會(huì)遇到ADO.NET數(shù)據(jù)集約束問題,這里將介紹ADO.NET數(shù)據(jù)集約束問題的解決方法,在這里拿出來和大家分享一下。DataAdapter 的 Fill 方法僅使用數(shù)據(jù)源中的表列和表行來填充 DataSet;雖然約束通常由數(shù)據(jù)源來設(shè)置,但在默認(rèn)情況下,F(xiàn)ill 方法不會(huì)將此架構(gòu)信息添加到 DataSet 中。 若要使用數(shù)據(jù)源中的現(xiàn)有主鍵約束信息填充 DataSet,則可以調(diào)用 DataAdapter 的 FillSchema 方法,或者在調(diào)用 Fill 之前將 DataAdapter 的 MissingSchemaAction 屬性設(shè)置為 AddWithKey。 這將確保 DataSet 中的主鍵約束反映數(shù)據(jù)源中的主鍵約束。 外鍵約束信息不包含在內(nèi),必須顯式創(chuàng)建,如ADO.NET數(shù)據(jù)集約束 (ADO.NET)中所示。
#T#如果在使用數(shù)據(jù)填充 DataSet 之前向其中添加架構(gòu)信息,可以確保將主鍵約束與 DataSet 中的 DataTable 對象包含在一起。 這樣,當(dāng)再次調(diào)用來填充 DataSet 時(shí),將使用主鍵列信息將數(shù)據(jù)源中的新行與每個(gè) DataTable 中的當(dāng)前行相匹配,并使用數(shù)據(jù)源中的數(shù)據(jù)改寫表中的當(dāng)前數(shù)據(jù)。 如果沒有架構(gòu)信息,來自數(shù)據(jù)源的新行將追加到 DataSet 中,從而導(dǎo)致重復(fù)的行。
如果數(shù)據(jù)源中的某列被標(biāo)識(shí)為自動(dòng)遞增列,則 FillSchema 方法或 MissingSchemaAction 為 AddWithKey 的 Fill 方法將創(chuàng)建一個(gè) AutoIncrement 屬性設(shè)置為 true 的 DataColumn。 不過,您將需要手動(dòng)設(shè)置 AutoIncrementStep 和 AutoIncrementSeed 值。 有關(guān)自動(dòng)遞增列的更多信息,請參見創(chuàng)建 AutoIncrement 列 (ADO.NET)。
當(dāng)使用 FillSchema 或?qū)?MissingSchemaAction 設(shè)置為 AddWithKey 時(shí),將需要在數(shù)據(jù)源中進(jìn)行額外的處理來確定主鍵列信息。 這一額外的處理可能會(huì)降低性能。 如果主鍵信息在設(shè)計(jì)時(shí)已知,為了實(shí)現(xiàn)***性能,建議顯式指定一個(gè)或多個(gè)主鍵列。 有關(guān)顯式設(shè)置表的主鍵信息的詳情,請參見定義主鍵 (ADO.NET)。
以下代碼示例顯示如何使用 FillSchema 向 DataSet 添加架構(gòu)信息。
- Dim custDataSet As DataSet = New DataSet()
- custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
- custAdapter.Fill(custDataSet, "Customers")
以下代碼示例顯示如何使用 Fill 方法的 MissingSchemaAction.AddWithKey 屬性向 DataSet 添加架構(gòu)信息。
- Dim custDataSet As DataSet = New DataSet()
- custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
- custAdapter.Fill(custDataSet, "Customers")