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 支援的案例,其中 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.  

您可以在相同的 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 支援的案例,其中 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.  

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

當用來填 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

注意

處理傳回多個結果的批次 SQL 語句時,FillSchema.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載只會取得第一個結果。 使用的多 Fill 載作為 DataSet 參數來取得多個結果。

方法 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.  

您可以在相同的 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 支援的案例,其中 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 語句,請注意下列事項:

  • 如果其中一個結果包含錯誤,則會略過所有後續的結果,而不會新增至 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

給繼承者的注意事項

在衍生類別中覆 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一次。 可以透過 FillSchema來設定主鍵資訊,方法是指定 PrimaryKeyDataTable屬性,或將 屬性設定 MissingSchemaActionAddWithKey

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

注意

處理傳回多個結果的批次 SQL 語句時,FillSchema.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載只會取得第一個結果。 使用的多 Fill 載作為 DataSet 參數來取得多個結果。

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

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

注意

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

給繼承者的注意事項

方法的Fill(DataSet)這個多載受到保護,且專為 .NET Framework 數據提供者使用而設計。

另請參閱

適用於