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 支援的案例,其中 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.
您可以在相同的 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 支援的案例,其中 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.
如果在填入數據表時遇到錯誤或例外狀況,則在發生錯誤之前加入的數據列會保留在數據表中。 作業的其餘部分已中止。
當用來填 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。
注意
處理傳回多個結果的批次 SQL 語句時,FillSchema.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
載只會取得第一個結果。 使用的多 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 呼叫 ,且 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 支援的案例,其中 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 語句,請注意下列事項:
- 如果其中一個結果包含錯誤,則會略過所有後續的結果,而不會新增至 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
。
給繼承者的注意事項
在衍生類別中覆 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一次。 可以透過 FillSchema來設定主鍵資訊,方法是指定 PrimaryKey 的 DataTable屬性,或將 屬性設定 MissingSchemaAction 為 AddWithKey
。
如果 SelectCommand
傳回 OUTER JOIN 的結果,則 DataAdapter
便不會為產生的 PrimaryKey 設定 DataTable值。 您必須明確定義主鍵,以確保正確解析重複的數據列。 如需詳細資訊,請參閱定義主索引鍵。
注意
處理傳回多個結果的批次 SQL 語句時,FillSchema.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
載只會取得第一個結果。 使用的多 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 數據提供者使用而設計。
另請參閱
- DbProviderFactory (ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)