共用方式為


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

Fill方法DataAdapter僅會使用資料來源中的表格欄位及列來填充DataSet;雖然限制通常由資料來源設定,但Fill方法預設不會將這些結構資訊新增至DataSet。 要使用來自資料來源的既有主鍵約束資訊填充DataSet,您可以呼叫FillSchemaDataAdapter的方法,或在呼叫Fill之前,先將AddWithKey屬性設置為DataAdapter。 這將確保 中 DataSet 的主要關鍵約束條件反映資料來源的限制。 不包含外部索引鍵條件約束資訊,且必須明確建立 (如 DataTable 條件約束所示)。

在填充資料前先為 a DataSet 加入結構資訊,確保 DataTable 中的物件包含主鍵約束。 因此,當需要額外呼叫填入 DataSet 時,主鍵欄位資訊會被用來將資料來源的新增資料列與每個 資料表中的當前資料列匹配,並用資料來源的資料覆蓋資料表中的當前資料。 若無結構描述資訊,則來自資料來源的新資料列會附加至 DataSet,而造成資料列重複。

注意

如果資料來源中的欄位被識別為自動遞增,則 FillSchema 方法或 Fill 方法與 MissingSchemaAction 被設為 的選項一起使用時,將會建立 DataColumn,其屬性 AutoIncrement 設為 true。 不過,你需要自己設定 AutoIncrementStepAutoIncrementSeed 價值觀。 如需自動遞增資料行的詳細資訊,請參閱建立自動遞增資料行

使用 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 回傳多個結果集的結構資訊時,建議你指定與 MissingSchemaActionAddWithKey 相關的內容,並在呼叫 Fill 方法時取得結構資訊。

另請參閱