DbDataAdapter.Fill 方法

定義

填入 DataSetDataTable

多載

Fill(DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)

使用 DataSet、來源資料表名稱、命令字串和命令行為,加入或重新整理 DataSet 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

Fill(DataTable[], Int32, Int32, IDbCommand, CommandBehavior)

使用 DataSetDataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

Fill(DataSet, String, IDataReader, Int32, Int32)

使用 DataSetDataTableIDataReader 名稱,新增或重新整理 DataSet 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

Fill(DataSet, Int32, Int32, String)

使用 DataSetDataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

Fill(Int32, Int32, DataTable[])

新增或重新整理一或多個 DataTable 物件中的資料列,以符合資料來源中的資料列,從指定的記錄開始,並擷取最多指定的記錄數目上限。

Fill(DataTable)

使用 DataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

Fill(DataTable, IDataReader)

使用指定的 DataTableIDataReader 名稱,新增或重新整理 DataTable 中的資料列,以符合那些在資料來源中的資料列。

Fill(DataSet, String)

使用 DataSetDataSet 名稱,加入或重新整理 DataTable 中的資料列,以符合那些在資料來源中的資料列。

Fill(DataSet)

DataSet 中加入或重新整理資料列。

Fill(DataTable, IDbCommand, CommandBehavior)

使用指定的 DataTableDataTableIDbCommand,加入或重新整理 CommandBehavior 中的資料列,以符合那些在資料來源中的資料列。

Fill(DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用 DataSet、來源資料表名稱、命令字串和命令行為,加入或重新整理 DataSet 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

protected:
 virtual int Fill(System::Data::DataSet ^ dataSet, int startRecord, int maxRecords, System::String ^ srcTable, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual int Fill (System.Data.DataSet dataSet, int startRecord, int maxRecords, string srcTable, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.Fill : System.Data.DataSet * int * int * string * System.Data.IDbCommand * System.Data.CommandBehavior -> int
Protected Overridable Function Fill (dataSet As DataSet, startRecord As Integer, maxRecords As Integer, srcTable As String, command As IDbCommand, behavior As CommandBehavior) As Integer

參數

dataSet
DataSet

要填入資料錄和結構描述 (如果必要的話) 的 DataSet

startRecord
Int32

要起始之以零為起始的資料錄編號。

maxRecords
Int32

要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。

srcTable
String

用於資料表對應的來源資料表名稱。

command
IDbCommand

用來從資料來源擷取資料列的 SQL SELECT 陳述式。

behavior
CommandBehavior

其中一個 CommandBehavior 值。

傳回

成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

例外狀況

來源資料表無效。

startRecord 參數小於 0。

-或-

maxRecords 參數小於 0。

備註

maxRecords值為 0 會取得開始記錄之後找到的所有記錄。 如果 maxRecords 大於剩餘的資料列數目,則只會傳回剩餘的資料列,而且不會發出任何錯誤。

方法 Fill 會使用相關聯 SelectCommand 屬性所指定的 SELECT 語句,從資料來源擷取資料列。 與 SELECT 語句相關聯的連線物件必須有效,但不需要開啟。 如果在呼叫之前 Fill 關閉連線,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

然後,作業 Fill 會將資料列新增至 中的 DataSet 目的地 DataTable 物件,如果物件不存在,則會 DataTable 建立物件。 建立 DataTable 物件時, Fill 作業通常會只建立資料行名稱中繼資料。 不過,如果 MissingSchemaAction 屬性設定為 AddWithKey ,也會建立適當的主鍵和條件約束。

如果在填入 DataTable 時遇到重複的資料行,它會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至 DataSet 每個結果集時,會放在個別的資料表中。 將整數值附加至指定的資料表名稱 (,以命名其他結果集,例如 「Table」、「Table1」、「Table2」 等) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

方法 Fill 支援包含多個 DataTable 物件的案例 DataSet ,其名稱只有大小寫不同。 在這種情況下, Fill 執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 呼叫 ,且 DataSetDataTable 包含名稱只因大小寫而不同,則會 DataTable 更新的 。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

您可以在相同的 DataTable 上多次使用 Fill 方法。 如果主鍵存在,傳入的資料列會與已經存在的相符資料列合併。 如果沒有主鍵存在,傳入的資料列會附加至 DataTable

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

注意

處理傳回多個結果的批次 SQL 語句時,.NET Framework資料提供者的 FillFillSchema 作 只會擷取第一個結果的架構資訊。

給繼承者的注意事項

方法的 Fill(DataSet) 這個多載受到保護,並設計成供.NET Framework資料提供者使用。

另請參閱

適用於

Fill(DataTable[], Int32, Int32, IDbCommand, CommandBehavior)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用 DataSetDataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

protected:
 virtual int Fill(cli::array <System::Data::DataTable ^> ^ dataTables, int startRecord, int maxRecords, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual int Fill (System.Data.DataTable[] dataTables, int startRecord, int maxRecords, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.Fill : System.Data.DataTable[] * int * int * System.Data.IDbCommand * System.Data.CommandBehavior -> int
Protected Overridable Function Fill (dataTables As DataTable(), startRecord As Integer, maxRecords As Integer, command As IDbCommand, behavior As CommandBehavior) As Integer

參數

dataTables
DataTable[]

要從資料來源填入的 DataTable 物件。

startRecord
Int32

要起始之以零為起始的資料錄編號。

maxRecords
Int32

要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。

command
IDbCommand

IDbCommand,執行其以填入 DataTable 物件。

behavior
CommandBehavior

其中一個 CommandBehavior 值。

傳回

加入至資料的資料表 (Data Table) 或在其中重新整理的資料列數目。

例外狀況

來源資料表無效。

-或-

連接無效。

找不到連線。

startRecord 參數小於 0。

-或-

maxRecords 參數小於 0。

備註

maxRecords值為 0 會取得開始記錄之後找到的所有記錄。 如果 maxRecords 大於剩餘的資料列數目,則只會傳回剩餘的資料列,而且不會發出任何錯誤。

方法 Fill 會使用 SELECT 語句從資料來源擷取資料。 IDbConnection與 SELECT 語句相關聯的物件必須有效,但不需要開啟。 IDbConnection如果在呼叫 之前 Fill 關閉 ,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

如果命令未傳回任何資料列,則不會將任何資料表新增至 DataSet ,但不會引發任何例外狀況。

如果物件在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。

當指定的查詢傳回多個結果時,每個結果集都會放在個別的資料表中。 將整數值附加至指定的資料表名稱 (,以命名其他結果集,例如 「Table」、「Table1」、「Table2」 等) 。 由於不會針對未傳回資料列的查詢建立任何資料表,因此如果您要處理插入查詢,後面接著選取查詢,則為選取查詢建立的資料表會命名為 「Table」,因為它是第一個建立的資料表。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

方法 Fill 支援包含多個 DataTable 物件的案例 DataSet ,其名稱只有大小寫不同。 在這種情況下, Fill 執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 呼叫 ,且 DataSetDataTable 包含名稱只因大小寫而不同,則會 DataTable 更新的 。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

如果在填入資料表時遇到錯誤或例外狀況,則在發生錯誤之前加入的資料列會保留在資料表中。 作業的其餘部分已中止。

當用來填 DataTable 入物件的 SELECT 語句傳回多個結果時,例如批次 SQL 語句,請注意下列事項:

  • 處理批次 SQL 語句中的多個結果時, maxRecords 僅適用于第一個結果。 對於包含章節化結果的資料列, (.NET Framework僅限 OLE DB 的資料提供者) 也是如此。 最上層的結果受限於 maxRecords ,但會新增所有子資料列。

  • 如果其中一個結果包含錯誤,則會略過所有後續的結果。

注意

DataSet不會包含 超過 所 maxRecords 指示的記錄數目。 不過,查詢所產生的整個結果集仍會從伺服器傳回。

給繼承者的注意事項

Fill(DataSet) 衍生類別中覆寫時,請務必呼叫基類的 Fill(DataSet) 方法。

另請參閱

適用於

Fill(DataSet, String, IDataReader, Int32, Int32)

使用 DataSetDataTableIDataReader 名稱,新增或重新整理 DataSet 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

protected:
 virtual int Fill(System::Data::DataSet ^ dataSet, System::String ^ srcTable, System::Data::IDataReader ^ dataReader, int startRecord, int maxRecords);
protected virtual int Fill (System.Data.DataSet dataSet, string srcTable, System.Data.IDataReader dataReader, int startRecord, int maxRecords);
override this.Fill : System.Data.DataSet * string * System.Data.IDataReader * int * int -> int
Protected Overridable Function Fill (dataSet As DataSet, srcTable As String, dataReader As IDataReader, startRecord As Integer, maxRecords As Integer) As Integer

參數

dataSet
DataSet

要填入資料錄和結構描述 (如果必要的話) 的 DataSet

srcTable
String

用於資料表對應的 DataTable 名稱。

dataReader
IDataReader

IDataReader 的名稱。

startRecord
Int32

要起始之以零為起始的資料錄編號。

maxRecords
Int32

要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。

傳回

成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

例外狀況

startRecord 小於 0。

-或-

maxRecords 小於 0。

備註

值為 maxRecords 0 會取得開始記錄之後找到的所有記錄。 如果 maxRecords 大於剩餘資料列的數目,則只會傳回剩餘的資料列,而且不會發出任何錯誤。

適用於

Fill(DataSet, Int32, Int32, String)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用 DataSetDataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

public:
 int Fill(System::Data::DataSet ^ dataSet, int startRecord, int maxRecords, System::String ^ srcTable);
public int Fill (System.Data.DataSet dataSet, int startRecord, int maxRecords, string srcTable);
override this.Fill : System.Data.DataSet * int * int * string -> int
Public Function Fill (dataSet As DataSet, startRecord As Integer, maxRecords As Integer, srcTable As String) As Integer

參數

dataSet
DataSet

要填入資料錄和結構描述 (如果必要的話) 的 DataSet

startRecord
Int32

要起始之以零為起始的資料錄編號。

maxRecords
Int32

要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。

srcTable
String

用於資料表對應的來源資料表名稱。

傳回

成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

例外狀況

來源資料表無效。

-或-

連接無效。

找不到連線。

startRecord 參數小於 0。

-或-

maxRecords 參數小於 0。

範例

下列範例會使用衍生類別 OleDbDataAdapter ,從Categories資料表中,填入 DataSet 15 個數據列,從第 10 列開始。 此範例假設您已建立 OleDbDataAdapterDataSet

public void GetRecords()
{
    // ...
    // create dataSet and adapter
    // ...
    adapter.Fill(dataSet,9,15,"Categories");
}
Public Sub GetRecords()
    ' ...
    ' create dataSet and adapter
    ' ...
    adapter.Fill(dataSet, 9, 15, "Categories")
End Sub

備註

值為 maxRecords 0 會取得開始記錄之後找到的所有記錄。 如果 maxRecords 大於剩餘的資料列數目,則只會傳回剩餘的資料列,而且不會發出任何錯誤。

如果對應的 select 命令是傳回多個結果的語句, Fill 則只適用于 maxRecords 第一個結果。

方法 Fill 會使用 SELECT 語句從資料來源擷取資料。 IDbConnection與 SELECT 語句相關聯的物件必須有效,但不需要開啟。 IDbConnection如果在呼叫 之前 Fill 關閉 ,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

如果命令未傳回任何資料列,則不會將任何資料表新增至 DataSet ,但不會引發例外狀況。

如果物件在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname 1」、「columnname2」、「columnname3」 等,產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。

當指定的查詢傳回多個結果時,每個結果集都會放在個別的資料表中。 其他結果集的命名方式是將整數值附加至指定的資料表名稱 (,例如「Table」、「Table1」、「Table2」 等等) 。 由於不會針對未傳回資料列的查詢建立任何資料表,因此如果您處理插入查詢後面接著選取查詢,則針對選取查詢建立的資料表名為 「Table」,因為它是第一個建立的資料表。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

方法 Fill 支援 的案例,其中 DataSet 包含多個 DataTable 物件的名稱只依大小寫而有所不同。 在這種情況下, Fill 會執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 呼叫 ,且 DataSetDataTable 包含名稱只依大小寫 DataTable 而不同之名稱的 ,則會更新。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

如果在填入資料表時遇到錯誤或例外狀況,則在發生錯誤之前加入的資料列會保留在資料表中。 作業的其餘部分已中止。

當用來填入 的 DataSet SELECT 語句傳回多個結果時,例如批次 SQL 語句,請注意下列事項:

  • 處理批次 SQL 語句中的多個結果時, maxRecords 僅適用于第一個結果。 對於包含章節化結果的資料列, (.NET Framework僅限 OLE DB 的資料提供者) 也是如此。 最上層的結果受限於 maxRecords ,但會新增所有子資料列。

  • 如果其中一個結果包含錯誤,則會略過所有後續的結果,而不會新增至 DataSet

使用後續 Fill 呼叫來重新整理 的內容 DataSet 時,必須符合兩個條件:

  1. SQL 語句應該符合最初用來填 DataSet 入 的語句。

  2. 索引 資料行資訊必須存在。

如果主要索引鍵資訊存在,任何重複的資料列都會進行協調,而且只會出現在對應至 的 DataSetDataTable 一次。 可以透過 FillSchema 來設定主鍵資訊,方法是指定 PrimaryKeyDataTable 屬性,或將 屬性設定 MissingSchemaActionAddWithKey

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

注意

處理傳回多個結果的批次 SQL 語句時, FillSchema .NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

注意

DataSet不會包含 超過 所 maxRecords 指示的記錄數目。 不過,查詢所產生的整個結果集仍會從伺服器傳回。

給繼承者的注意事項

在衍生類別中覆 Fill(DataSet) 寫時,請務必呼叫基類的 Fill(DataSet) 方法。

另請參閱

適用於

Fill(Int32, Int32, DataTable[])

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

新增或重新整理一或多個 DataTable 物件中的資料列,以符合資料來源中的資料列,從指定的記錄開始,並擷取最多指定的記錄數目上限。

public:
 int Fill(int startRecord, int maxRecords, ... cli::array <System::Data::DataTable ^> ^ dataTables);
public int Fill (int startRecord, int maxRecords, params System.Data.DataTable[] dataTables);
override this.Fill : int * int * System.Data.DataTable[] -> int
Public Function Fill (startRecord As Integer, maxRecords As Integer, ParamArray dataTables As DataTable()) As Integer

參數

startRecord
Int32

要起始之以零為起始的資料錄編號。

maxRecords
Int32

要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。

dataTables
DataTable[]

要從資料來源填入的 DataTable 物件。

傳回

成功加入或重新整理物件中的資料 DataTable 列數目。 這個值不包含受未傳回資料列之陳述式所影響的資料列。

例外狀況

dataTablesnull 或是空陣列。

startRecord 小於 0。

-或-

maxRecords 小於 0。

備註

maxRecords值為 0 會取得開始記錄之後找到的所有記錄。 如果 maxRecords 大於剩餘的資料列數目,則只會傳回剩餘的資料列,而且不會發出任何錯誤。

方法 Fill 會使用相關聯 SelectCommand 屬性所指定的 SELECT 語句,從資料來源擷取資料列。 與 SELECT 語句相關聯的連線物件必須有效,但不需要開啟。 如果在呼叫 之前 Fill 關閉連線,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

然後,作業 Fill 會將資料列新增至 中的 DataSet 目的地 DataTable 物件,如果物件不存在,則會 DataTable 建立物件。 建立 DataTable 物件時, Fill 作業通常會只建立資料行名稱中繼資料。 不過,如果 MissingSchemaAction 屬性設定為 AddWithKey ,也會建立適當的主鍵和條件約束。

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

如果資料配接器在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname1」、「columnname2」、「columnname3」 等方式產生後續資料行的名稱。 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至 DataSet 時,每個結果集都會放在個別的資料表中。 將整數值附加至指定的資料表名稱 (,以命名其他結果集,例如 「Table」、「Table1」、「Table2」 等) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

當用來填入 DataSet 的 SELECT 語句傳回多個結果時,例如批次 SQL 語句,如果其中一個結果包含錯誤,則會略過所有後續的結果,而不會新增至 DataSet

您可以在相同的 DataTable 上多次使用 Fill 方法。 如果主鍵存在,傳入的資料列會與已經存在的相符資料列合併。 如果沒有主鍵存在,傳入的資料列會附加至 DataTable

注意

處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

另請參閱

適用於

Fill(DataTable)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用 DataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。

public:
 int Fill(System::Data::DataTable ^ dataTable);
public int Fill (System.Data.DataTable dataTable);
override this.Fill : System.Data.DataTable -> int
Public Function Fill (dataTable As DataTable) As Integer

參數

dataTable
DataTable

用於資料表對應的 DataTable 名稱。

傳回

成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

例外狀況

來源資料表無效。

備註

方法 Fill 會使用相關聯 SelectCommand 屬性所指定的 SELECT 語句,從資料來源擷取資料列。 與 SELECT 語句相關聯的連線物件必須有效,但不需要開啟。 如果在呼叫之前 Fill 關閉連線,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

然後,作業 Fill 會將資料列新增至 中的 DataSet 目的地 DataTable 物件,如果物件不存在,則會 DataTable 建立物件。 建立 DataTable 物件時, Fill 作業通常會只建立資料行名稱中繼資料。 不過,如果 MissingSchemaAction 屬性設定為 AddWithKey ,也會建立適當的主鍵和條件約束。

如果在填入 DataTable 時遇到重複的資料行,它會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至 DataSet 每個結果集時,會放在個別的資料表中。

接受 做為參數的 FillDataTable 多載只會取得第一個結果。 使用 做為參數的 多載 FillDataSet 來取得多個結果。

方法 Fill 支援包含多個 DataTable 物件的案例 DataSet ,其名稱只有大小寫不同。 在這種情況下, Fill 執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
 dataset.Tables.Add("aaa");  
 dataset.Tables.Add("AAA");  
 adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
    adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 呼叫 ,且 DataSetDataTable 包含名稱只因大小寫而不同,則會 DataTable 更新的 。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
 dataset.Tables.Add("aaa");  
    adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

您可以在相同的 DataTable 上多次使用 Fill 方法。 如果主鍵存在,傳入的資料列會與已經存在的相符資料列合併。 如果沒有主鍵存在,傳入的資料列會附加至 DataTable

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

注意

處理傳回多個結果的批次 SQL 語句時,.NET Framework資料提供者的 FillFillSchema 作 只會擷取第一個結果的架構資訊。

給繼承者的注意事項

方法的 Fill(DataSet) 這個多載受到保護,並設計成供.NET Framework資料提供者使用。

另請參閱

適用於

Fill(DataTable, IDataReader)

使用指定的 DataTableIDataReader 名稱,新增或重新整理 DataTable 中的資料列,以符合那些在資料來源中的資料列。

protected:
 virtual int Fill(System::Data::DataTable ^ dataTable, System::Data::IDataReader ^ dataReader);
protected virtual int Fill (System.Data.DataTable dataTable, System.Data.IDataReader dataReader);
override this.Fill : System.Data.DataTable * System.Data.IDataReader -> int
Protected Overridable Function Fill (dataTable As DataTable, dataReader As IDataReader) As Integer

參數

dataTable
DataTable

要填入資料錄和結構描述 (如果必要的話) 的 DataTable

dataReader
IDataReader

IDataReader 的名稱。

傳回

成功加入至 DataTable 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

適用於

Fill(DataSet, String)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用 DataSetDataSet 名稱,加入或重新整理 DataTable 中的資料列,以符合那些在資料來源中的資料列。

public:
 int Fill(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
public int Fill (System.Data.DataSet dataSet, string srcTable);
override this.Fill : System.Data.DataSet * string -> int
Public Function Fill (dataSet As DataSet, srcTable As String) As Integer

參數

dataSet
DataSet

要填入資料錄和結構描述 (如果必要的話) 的 DataSet

srcTable
String

用於資料表對應的來源資料表名稱。

傳回

成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

例外狀況

來源資料表無效。

範例

下列範例會使用衍生類別 OleDbDataAdapter ,以從類別資料表填入 DataSet 資料列。 此範例假設您已建立 OleDbDataAdapterDataSet

public void GetRecords()
{
    // ...
    // create dataSet and adapter
    // ...
    adapter.Fill(dataSet, "Categories");
}
Public Sub GetRecords()
    ' ...
    ' create dataSet and adapter
    ' ...
    adapter.Fill(dataSet, "Categories")
End Sub

備註

方法 Fill 會使用 SELECT 語句從資料來源擷取資料。 IDbConnection與 select 命令相關聯的物件必須有效,但不需要開啟。 IDbConnection如果在呼叫 之前 Fill 關閉 ,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

如果命令未傳回任何資料列,則不會將任何資料表新增至 DataSet ,而且不會引發任何例外狀況。

DbDataAdapter如果物件在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname1」、「columnname2」、「columnname3」 等,產生後續資料行的名稱。 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。

當指定的查詢傳回多個結果時,每個結果集都會放在個別的資料表中。 將整數值附加至指定的資料表名稱 (,以命名其他結果集,例如 「Table」、「Table1」、「Table2」 等) 。 由於不會針對未傳回資料列的查詢建立任何資料表,因此如果您要處理插入查詢,後面接著選取查詢,則為選取查詢建立的資料表會命名為 「Table」,因為它是第一個建立的資料表。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

方法 Fill 支援包含多個 DataTable 物件的案例 DataSet ,其名稱只有大小寫不同。 在這種情況下, Fill 執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.  
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 Fill 呼叫 ,且 DataSetDataTable 包含名稱只因大小寫而不同,則會 DataTable 更新的 。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.  

如果在填入資料表時發生錯誤或例外狀況,在發生錯誤之前加入的資料列會保留在資料表中。 作業的其餘部分已中止。

當用來填入 DataSet 的 SELECT 語句傳回多個結果時,例如批次 SQL 語句,請注意下列事項:

  • 如果其中一個結果包含錯誤,則會略過所有後續的結果,而不會新增至 DataSet

使用後續 Fill 呼叫來重新整理 的內容 DataSet 時,必須符合兩個條件:

  1. SQL 語句應該符合一開始用來填入 的 DataSet 語句。

  2. 索引 資料行資訊必須存在。 如果主要索引鍵資訊存在,則會協調任何重複的資料列,而且只會出現在對應至 的 DataSetDataTable 一次。 藉由指定 PrimaryKeyDataTable 屬性,或將 屬性 AddWithKey 設定 MissingSchemaAction 為 ,即可透過 設定 FillSchema 主鍵資訊。

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

注意

處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

給繼承者的注意事項

Fill(DataSet) 衍生類別中覆寫時,請務必呼叫基類的 Fill(DataSet) 方法。

另請參閱

適用於

Fill(DataSet)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

DataSet 中加入或重新整理資料列。

public:
 override int Fill(System::Data::DataSet ^ dataSet);
public override int Fill (System.Data.DataSet dataSet);
override this.Fill : System.Data.DataSet -> int
Public Overrides Function Fill (dataSet As DataSet) As Integer

參數

dataSet
DataSet

要填入資料錄和結構描述 (如果必要的話) 的 DataSet

傳回

成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

實作

備註

方法 Fill 會使用 SELECT 語句從資料來源擷取資料。 IDbConnection與 select 命令相關聯的物件必須有效,但不需要開啟。 IDbConnection如果在呼叫 之前 Fill 關閉 ,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

如果在填入資料表時發生錯誤或例外狀況,在發生錯誤之前加入的資料列會保留在資料表中。 作業的其餘部分已中止。

如果命令未傳回任何資料列,則不會將任何資料表新增至 DataSet ,而且不會引發任何例外狀況。

如果物件在填入 DataTable 時遇到重複的資料行,它會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。

當指定的查詢傳回多個結果時,每個傳回查詢的資料列結果集都會放在個別的資料表中。 將整數值附加至指定的資料表名稱 (,以命名其他結果集,例如 「Table」、「Table1」、「Table2」 等) 。 由於不會針對未傳回資料列的查詢建立任何資料表,因此如果您處理插入查詢後面接著選取查詢,則為選取查詢建立的資料表會命名為 「Table」,因為它是第一個建立的資料表。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

當用來填入 DataSet 的 SELECT 語句傳回多個結果時,例如批次 SQL 語句,如果其中一個結果包含錯誤,則會略過所有後續的結果,而且不會新增至 DataSet

使用後續 Fill 呼叫來重新整理 的內容 DataSet 時,必須符合兩個條件:

  1. SQL 語句應該符合一開始用來填入 的 DataSet 語句。

  2. 索引 資料行資訊必須存在。

如果主要索引鍵資訊存在,則會協調任何重複的資料列,而且只會出現在對應至 的 DataSetDataTable 一次。 藉由指定 PrimaryKeyDataTable 屬性,或將 屬性 AddWithKey 設定 MissingSchemaAction 為 ,即可透過 設定 FillSchema 主鍵資訊。

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

注意

處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

另請參閱

適用於

Fill(DataTable, IDbCommand, CommandBehavior)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用指定的 DataTableDataTableIDbCommand,加入或重新整理 CommandBehavior 中的資料列,以符合那些在資料來源中的資料列。

protected:
 virtual int Fill(System::Data::DataTable ^ dataTable, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual int Fill (System.Data.DataTable dataTable, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.Fill : System.Data.DataTable * System.Data.IDbCommand * System.Data.CommandBehavior -> int
Protected Overridable Function Fill (dataTable As DataTable, command As IDbCommand, behavior As CommandBehavior) As Integer

參數

dataTable
DataTable

要填入資料錄和結構描述 (如果必要的話) 的 DataTable

command
IDbCommand

用來從資料來源擷取資料列的 SQL SELECT 陳述式。

behavior
CommandBehavior

其中一個 CommandBehavior 值。

傳回

成功加入至 DataTable 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。

備註

方法 Fill 會使用相關聯 SelectCommand 屬性所指定的 SELECT 語句,從資料來源擷取資料列。 與 SELECT 語句相關聯的連線物件必須有效,但不需要開啟。 如果在呼叫 之前 Fill 關閉連接,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 Fill 開啟連線,它會保持開啟狀態。

然後,作業 Fill 會將資料列新增至 中指定的 DataSet 目的地 DataTable 物件,如果物件不存在,則會 DataTable 建立物件。 建立 DataTable 物件時, Fill 作業通常會只建立資料行名稱中繼資料。 不過,如果 MissingSchemaAction 屬性設定為 AddWithKey ,也會建立適當的主鍵和條件約束。

如果物件在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。

接受 做為參數的 FillDataTable 多載只會取得第一個結果。 使用 做為參數的 多載 FillDataSet 來取得多個結果。

您可以在相同的 DataTable 上多次使用 Fill 方法。 如果主鍵存在,傳入的資料列會與已經存在的相符資料列合併。 如果沒有主鍵存在,傳入的資料列會附加至 DataTable

如果 SelectCommand 傳回 OUTER JOIN 的結果,則 DataAdapter 便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵

注意

處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

給繼承者的注意事項

方法的 Fill(DataSet) 這個多載受到保護,並設計成供.NET Framework資料提供者使用。

另請參閱

適用於