DbDataAdapter.Fill 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
Fill(DataSet, Int32, Int32, String, IDbCommand, CommandBehavior) |
使用 DataSet、來源資料表名稱、命令字串和命令行為,加入或重新整理 DataSet 中指定範圍內的資料列,以符合那些在資料來源中的資料列。 |
Fill(DataTable[], Int32, Int32, IDbCommand, CommandBehavior) |
使用 DataSet 和 DataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。 |
Fill(DataSet, String, IDataReader, Int32, Int32) |
使用 DataSet、DataTable 和 IDataReader 名稱,新增或重新整理 DataSet 中指定範圍內的資料列,以符合那些在資料來源中的資料列。 |
Fill(DataSet, Int32, Int32, String) |
使用 DataSet 和 DataSet 名稱,加入或重新整理 DataTable 中指定範圍內的資料列,以符合那些在資料來源中的資料列。 |
Fill(Int32, Int32, DataTable[]) |
新增或重新整理一或多個 DataTable 物件中的資料列,以符合資料來源中的資料列,從指定的記錄開始,並擷取最多指定的記錄數目上限。 |
Fill(DataTable) | |
Fill(DataTable, IDataReader) |
使用指定的 DataTable 和 IDataReader 名稱,新增或重新整理 DataTable 中的資料列,以符合那些在資料來源中的資料列。 |
Fill(DataSet, String) |
使用 DataSet 和 DataSet 名稱,加入或重新整理 DataTable 中的資料列,以符合那些在資料來源中的資料列。 |
Fill(DataSet) |
在 DataSet 中加入或重新整理資料列。 |
Fill(DataTable, IDbCommand, CommandBehavior) |
使用指定的 DataTable、DataTable 和 IDbCommand,加入或重新整理 CommandBehavior 中的資料列,以符合那些在資料來源中的資料列。 |
Fill(DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)
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
參數
- startRecord
- Int32
要起始之以零為起始的資料錄編號。
- maxRecords
- Int32
要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。
- srcTable
- String
用於資料表對應的來源資料表名稱。
- command
- IDbCommand
用來從資料來源擷取資料列的 SQL SELECT 陳述式。
- behavior
- CommandBehavior
其中一個 CommandBehavior 值。
傳回
成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。
例外狀況
來源資料表無效。
備註
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 呼叫 ,且 DataSet 只 DataTable 包含名稱只因大小寫而不同,則會 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資料提供者的 Fill 實 FillSchema 作 只會擷取第一個結果的架構資訊。
給繼承者的注意事項
方法的 Fill(DataSet) 這個多載受到保護,並設計成供.NET Framework資料提供者使用。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(DataTable[], Int32, Int32, IDbCommand, CommandBehavior)
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
參數
- startRecord
- Int32
要起始之以零為起始的資料錄編號。
- maxRecords
- Int32
要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。
- command
- IDbCommand
IDbCommand,執行其以填入 DataTable 物件。
- behavior
- CommandBehavior
其中一個 CommandBehavior 值。
傳回
加入至資料的資料表 (Data Table) 或在其中重新整理的資料列數目。
例外狀況
找不到連線。
備註
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 呼叫 ,且 DataSet 只 DataTable 包含名稱只因大小寫而不同,則會 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) 方法。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(DataSet, String, IDataReader, Int32, Int32)
使用 DataSet、DataTable 和 IDataReader 名稱,新增或重新整理 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
參數
- dataReader
- IDataReader
IDataReader 的名稱。
- startRecord
- Int32
要起始之以零為起始的資料錄編號。
- maxRecords
- Int32
要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。
傳回
成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。
例外狀況
備註
值為 maxRecords
0 會取得開始記錄之後找到的所有記錄。 如果 maxRecords
大於剩餘資料列的數目,則只會傳回剩餘的資料列,而且不會發出任何錯誤。
適用於
Fill(DataSet, Int32, Int32, String)
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
參數
- startRecord
- Int32
要起始之以零為起始的資料錄編號。
- maxRecords
- Int32
要擷取之資料錄的最大數目。 指定 0 以擷取開始記錄之後的所有記錄。
- srcTable
- String
用於資料表對應的來源資料表名稱。
傳回
成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。
例外狀況
找不到連線。
範例
下列範例會使用衍生類別 OleDbDataAdapter ,從Categories資料表中,填入 DataSet 15 個數據列,從第 10 列開始。 此範例假設您已建立 OleDbDataAdapter 和 DataSet 。
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 呼叫 ,且 DataSet 只 DataTable 包含名稱只依大小寫 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 時,必須符合兩個條件:
SQL 語句應該符合最初用來填 DataSet 入 的語句。
索引 鍵 資料行資訊必須存在。
如果主要索引鍵資訊存在,任何重複的資料列都會進行協調,而且只會出現在對應至 的 DataSet 中 DataTable 一次。 可以透過 FillSchema 來設定主鍵資訊,方法是指定 PrimaryKey 的 DataTable 屬性,或將 屬性設定 MissingSchemaAction 為 AddWithKey
。
如果 SelectCommand
傳回 OUTER JOIN 的結果,則 DataAdapter
便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵。
注意
處理傳回多個結果的批次 SQL 語句時, FillSchema .NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey
。
注意
DataSet
不會包含 超過 所 maxRecords
指示的記錄數目。 不過,查詢所產生的整個結果集仍會從伺服器傳回。
給繼承者的注意事項
在衍生類別中覆 Fill(DataSet) 寫時,請務必呼叫基類的 Fill(DataSet) 方法。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(Int32, Int32, DataTable[])
新增或重新整理一或多個 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 以擷取開始記錄之後的所有記錄。
傳回
成功加入或重新整理物件中的資料 DataTable 列數目。 這個值不包含受未傳回資料列之陳述式所影響的資料列。
例外狀況
dataTables
為 null
或是空陣列。
備註
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
。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(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
參數
傳回
成功加入至 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 呼叫 ,且 DataSet 只 DataTable 包含名稱只因大小寫而不同,則會 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資料提供者的 Fill 實 FillSchema 作 只會擷取第一個結果的架構資訊。
給繼承者的注意事項
方法的 Fill(DataSet) 這個多載受到保護,並設計成供.NET Framework資料提供者使用。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(DataTable, IDataReader)
使用指定的 DataTable 和 IDataReader 名稱,新增或重新整理 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
參數
- dataReader
- IDataReader
IDataReader 的名稱。
傳回
成功加入至 DataTable 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。
適用於
Fill(DataSet, String)
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
參數
- srcTable
- String
用於資料表對應的來源資料表名稱。
傳回
成功加入至 DataSet 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。
例外狀況
來源資料表無效。
範例
下列範例會使用衍生類別 OleDbDataAdapter ,以從類別資料表填入 DataSet 資料列。 此範例假設您已建立 OleDbDataAdapter 和 DataSet 。
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 呼叫 ,且 DataSet 只 DataTable 包含名稱只因大小寫而不同,則會 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 時,必須符合兩個條件:
SQL 語句應該符合一開始用來填入 的 DataSet 語句。
索引 鍵 資料行資訊必須存在。 如果主要索引鍵資訊存在,則會協調任何重複的資料列,而且只會出現在對應至 的 DataSet 中 DataTable 一次。 藉由指定 PrimaryKey 的 DataTable 屬性,或將 屬性
AddWithKey
設定 MissingSchemaAction 為 ,即可透過 設定 FillSchema 主鍵資訊。
如果 SelectCommand
傳回 OUTER JOIN 的結果,則 DataAdapter
便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵。
注意
處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey
。
給繼承者的注意事項
在 Fill(DataSet) 衍生類別中覆寫時,請務必呼叫基類的 Fill(DataSet) 方法。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(DataSet)
在 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 或在其中重新整理的資料列數目。 這不包含被不傳回資料列之陳述式所影響的資料列。
實作
備註
方法 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 時,必須符合兩個條件:
SQL 語句應該符合一開始用來填入 的 DataSet 語句。
索引 鍵 資料行資訊必須存在。
如果主要索引鍵資訊存在,則會協調任何重複的資料列,而且只會出現在對應至 的 DataSet 中 DataTable 一次。 藉由指定 PrimaryKey 的 DataTable 屬性,或將 屬性 AddWithKey
設定 MissingSchemaAction 為 ,即可透過 設定 FillSchema 主鍵資訊。
如果 SelectCommand
傳回 OUTER JOIN 的結果,則 DataAdapter
便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保已正確解析重複的資料列。 如需詳細資訊,請參閱 定義主鍵。
注意
處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey
。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)
適用於
Fill(DataTable, IDbCommand, CommandBehavior)
使用指定的 DataTable、DataTable 和 IDbCommand,加入或重新整理 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
參數
- 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資料提供者使用。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)