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