Fill方法DataAdapter僅會使用資料來源中的表格欄位及列來填充DataSet;雖然限制通常由資料來源設定,但Fill方法預設不會將這些結構資訊新增至DataSet。 要使用來自資料來源的既有主鍵約束資訊填充DataSet,您可以呼叫FillSchemaDataAdapter的方法,或在呼叫Fill之前,先將AddWithKey屬性設置為DataAdapter。 這將確保 中 DataSet 的主要關鍵約束條件反映資料來源的限制。 不包含外部索引鍵條件約束資訊,且必須明確建立 (如 DataTable 條件約束所示)。
在填充資料前先為 a DataSet 加入結構資訊,確保 DataTable 中的物件包含主鍵約束。 因此,當需要額外呼叫填入 DataSet 時,主鍵欄位資訊會被用來將資料來源的新增資料列與每個 資料表中的當前資料列匹配,並用資料來源的資料覆蓋資料表中的當前資料。 若無結構描述資訊,則來自資料來源的新資料列會附加至 DataSet,而造成資料列重複。
注意
如果資料來源中的欄位被識別為自動遞增,則 FillSchema 方法或 Fill 方法與 MissingSchemaAction 被設為 的選項一起使用時,將會建立 DataColumn,其屬性 AutoIncrement 設為 true。 不過,你需要自己設定 AutoIncrementStep 和 AutoIncrementSeed 價值觀。 如需自動遞增資料行的詳細資訊,請參閱建立自動遞增資料行。
使用 FillSchema 或將 MissingSchemaAction 設置為 AddWithKey 需要在資料來源進行額外處理以判斷主鍵資料欄資訊。 這些其他作業可能會降低效能。 如果您在設計階段就已知道主索引鍵資訊,建議您明確地指定主索引鍵資料行,以達到最佳效能。 如需明確設定資料表之主索引鍵資訊的詳細資訊,請參閱定義主索引鍵。
以下程式碼範例展示了如何使用 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");
以下的程式碼範例展示了如何使用MissingSchemaAction.AddWithKey屬性將結構資訊加入到DataSetFill之中:
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」。
注意
若針對會回傳多個結果集的命令呼叫 FillSchema 物件的方法 OleDbDataAdapter,則僅回傳第一個結果集的結構資訊。 使用 OleDbDataAdapter 回傳多個結果集的結構資訊時,建議你指定與 MissingSchemaAction 和 AddWithKey 相關的內容,並在呼叫 Fill 方法時取得結構資訊。