將現有條件約束加入至資料集

DataAdapterFill 方法只使用來自資料來源的資料表資料行和資料列填入 DataSet;雖然條件約束一般是由資料來源所設定,但 Fill 方法預設不會將這個結構描述資訊新增 DataSet。 若要以資料來源的現有主索引鍵條件約束資訊填入 DataSet,您可以呼叫 DataAdapterFillSchema 方法,或在呼叫 Fill 前先將 DataAdapterMissingSchemaAction 屬性設定為 AddWithKey。 這樣能確保 DataSet 內的主索引鍵條件約束反映出資料來源內的主索引鍵條件約束。 不包含外部索引鍵條件約束資訊,且必須明確建立 (如 DataTable 條件約束所示)。

將資料填入 DataSet 前先將結構描述資訊新增至其中,便能確保 DataSet 內的 DataTable 物件包含主索引鍵條件約束。 這麼一來,再次呼叫以填入 DataSet 時,便會使用主索引鍵資料行資訊來比對資料來源的新資料列和每個 DataTable 中的目前資料列,然後以資料來源的資料覆寫資料表中的目前資料。 若無結構描述資訊,則來自資料來源的新資料列會附加至 DataSet,而造成資料列重複。

注意

如果資料來源中的資料行定義為自動遞增,則 FillSchema 方法或 MissingSchemaActionAddWithKeyFill 方法,會建立 DataColumn,並將其 AutoIncrement 屬性設為 true。 但是您必須自行設定 AutoIncrementStepAutoIncrementSeed 的值。 如需自動遞增資料行的詳細資訊,請參閱建立自動遞增資料行

若您使用 FillSchema 或將 MissingSchemaAction 設定為 AddWithKey,則資料來源需要進行其他的作業來判斷主索引鍵資料行資訊。 這些其他作業可能會降低效能。 如果您在設計階段就已知道主索引鍵資訊,建議您明確地指定主索引鍵資料行,以達到最佳效能。 如需明確設定資料表之主索引鍵資訊的詳細資訊,請參閱定義主索引鍵

下列程式碼範例顯示如何使用 FillSchema 將結構描述資訊新增 DataSet

Dim custDataSet As New DataSet()  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");  
custAdapter.Fill(custDataSet, "Customers");  

下列程式碼範例顯示如何使用 Fill 方法的 MissingSchemaAction.AddWithKey 屬性,將結構描述資訊新增 DataSet

Dim custDataSet As New DataSet()  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;  
custAdapter.Fill(custDataSet, "Customers");  

處理多個結果集

如果 DataAdapter 發現從 SelectCommand 傳回的多個結果集,它便會在 DataSet 內建立多個資料表。 會給予資料表一個以零為底數的 TableN 增量預設名稱,並從 Table 開始,而非 "Table0"。 如果資料表名稱做為引數傳遞至 FillSchema 方法,則會給予資料表一個以零為基礎的 TableNameN 遞增名稱,並從 TableName 開始,而非 "TableName0"。

注意

若傳回多個結果集的命令呼叫 OleDbDataAdapter 物件的 FillSchema 方法,則只會傳回來自第一個結果集的結構描述資訊。 使用 OleDbDataAdapter 傳回多個結果集的結構描述資訊時,建議您指定 AddWithKeyMissingSchemaAction,並在呼叫 Fill 方法時取得結構描述資訊。

另請參閱