OleDbDataAdapter.Fill メソッド

定義

ADO Recordset オブジェクトまたは Record オブジェクト内の行と一致するように、DataSet 内の行を追加または更新します。

オーバーロード

Fill(DataTable, Object)

指定した DataTable および ADO オブジェクトを使用して、ADO Recordset オブジェクトまたは Record オブジェクト内の行と一致するように、DataTable 内の行を追加または更新します。

Fill(DataSet, Object, String)

指定した DataSet、ADO オブジェクト、およびソース テーブル名を使用して、ADO Recordset オブジェクトまたは Record オブジェクト内の行と一致するように、DataSet 内の行を追加または更新します。

Fill(DataTable, Object)

ソース:
OleDbDataAdapter.cs
ソース:
OleDbDataAdapter.cs
ソース:
OleDbDataAdapter.cs

指定した DataTable および ADO オブジェクトを使用して、ADO Recordset オブジェクトまたは Record オブジェクト内の行と一致するように、DataTable 内の行を追加または更新します。

public:
 int Fill(System::Data::DataTable ^ dataTable, System::Object ^ ADODBRecordSet);
public int Fill (System.Data.DataTable dataTable, object ADODBRecordSet);
override this.Fill : System.Data.DataTable * obj -> int
Public Function Fill (dataTable As DataTable, ADODBRecordSet As Object) As Integer

パラメーター

dataTable
DataTable

レコードおよび必要に応じてスキーマを格納するための DataTable

ADODBRecordSet
Object

ADO Recordset オブジェクトまたは Record オブジェクト。

戻り値

DataTable で正常に更新された行数。 これには、行を返さないステートメントの影響を受ける行は含まれません。

注釈

ActiveX Data Objects (ADO) と ADO.NET の間のリンクは、ADO から にDataSetデータをコピーできる一方向の操作ですが、データに対する更新は、ADO.NET で処理する必要があります。

メソッドの Fill このオーバーロードは、操作の完了時に入力 RecordsetFill 閉じません。

複数の結果を返すバッチ SQL ステートメントを処理する場合、OLE DB.NET Framework データ プロバイダーの と FillSchema のこの実装Fillでは、最初の結果のみのスキーマ情報が取得されます。

操作によって Fill 、 内の指定したコピー先 DataTable オブジェクト DataSetに行が追加され、オブジェクトがまだ存在しない場合は作成 DataTable されます。 オブジェクトを DataTable 作成すると、通常、操作では Fill 列名メタデータのみが作成されます。 ただし、 プロパティが MissingSchemaActionAddWithKey設定されている場合は、適切な主キーと制約も作成されます。

メソッドは Fill 、同じ DataTableで複数回使用できます。 主キーが存在する場合、受信行は、既に存在する一致する行とマージされます。 主キーが存在しない場合、受信行は に DataTable追加されます。 主キー情報が存在する場合、重複する行は調整され、 に対応DataSetする に DataTable 1 回だけ表示されます。 主キー情報は、 の プロパティを指定するか、 プロパティを PrimaryKeyAddWithKey設定することによって、 を使用FillSchemaして設定MissingSchemaActionできます。DataTable

SelectCommand が OUTER JOIN の結果を返す場合、 DataAdapter は、生成される PrimaryKeyDataTable値を設定しません。 重複する行が正しく解決されるように、主キーを明示的に定義する必要があります。 詳しくは、「主キーの定義」をご覧ください。

.NET Framework Data Provider for OLE DB で正しく機能するには、AddWithKeyネイティブ OLE DB プロバイダーが DBPROP_UNIQUEROWS プロパティを設定して必要な主キー情報を取得し、 のIColumnsRowsetDBCOLUMN_KEYCOLUMNを調べて主キー列である列を決定する必要があります。 または、ユーザーは、各 DataTableに主キー制約を明示的に設定することもできます。 これにより、既存のレコードと一致する受信レコードが追加されるのではなく更新されます。

の設定DataTable中にOleDbDataAdapter重複する列が検出された場合は、パターン "columnname1"、"columnname2"、"columnname 3" などを使用して、後続の列の名前が生成されます。 空の列名は、最初の DataTable列に空の文字列を使用して に追加され、その後の空の列には "1"、"2"、"3" などが続きます。

ADO Recordset または Record オブジェクトの値は、 内のストレージ用の共通言語ランタイム型に DataSet変換されます。

注意事項

メソッドの Fill このオーバーロードは、塗りつぶし操作が完了したときに ADO オブジェクトに対して暗黙的に呼び出 Close されることはありません。 したがって、ADO Recordset または Record オブジェクトの使用が完了したら、常に を呼び出Closeします。 これにより、データ ソースへの基になる接続がタイムリーに解放され、また、既存の参照がまだ存在する場合に、アンマネージ ADO オブジェクトがガベージ コレクションによって再利用されるため、アクセス違反が発生する可能性も防ぐことができます。

DataAdapter メソッドをTableMappings.Add呼び出し、ソース テーブル パラメーターを空の文字列に明示的にマップすると、ソース テーブルを使用してデータセットが正常に入力されますが、データセットには何も設定されません。 たとえば、次の例では、 rDataSet は何も設定されません。

rAdapter.TableMappings.Add("source table", "");  
rAdapter.Fill(rDataSet, "source table");     

この例では、複数の結果を処理するときに結果をスキップする方法を示します。

次の例では、 をOleDbDataAdapter使用して ADO Recordsetを使用して をDataTable入力します。 この例では、ADO Recordsetが作成されていることを前提としています。

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()  
     Dim custDS As DataSet = New DataSet  
     Dim custTable As DataTable = New DataTable("Customers")  
     custTable.Columns.Add("CustomerID", Type.GetType("System.String"))  
     custTable.Columns.Add("CompanyName", Type.GetType("System.String"))  
     custDS.Tables.Add(custTable)  
     'Use ADO objects from ADO library (msado15.dll) imported  
     ' as.NET library ADODB.dll using TlbImp.exe  
     Dim adoConn As ADODB.Connection = New ADODB.Connection()  
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)  
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)  
     custDA.Fill(custTable, adoRS)  
     adoRS.Close()  
     adoConn.Close()  
OleDbDataAdapter custDA = new OleDbDataAdapter();  
     DataSet custDS = new DataSet();  
     DataTable custTable = new DataTable("Customers");  
     custTable.Columns.Add("CustomerID", typeof(String));  
     custTable.Columns.Add("CompanyName", typeof(String));  
     custDS.Tables.Add(custTable);  
     //Use ADO objects from ADO library (msado15.dll) imported  
     //  as.NET library ADODB.dll using TlbImp.exe  
     ADODB.Connection adoConn = new ADODB.Connection();  
     ADODB.Recordset adoRS = new ADODB.Recordset();  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);  
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);  
     custDA.Fill(custTable, adoRS);  
     adoRS.Close();  
     adoConn.Close();  

こちらもご覧ください

適用対象

Fill(DataSet, Object, String)

ソース:
OleDbDataAdapter.cs
ソース:
OleDbDataAdapter.cs
ソース:
OleDbDataAdapter.cs

指定した DataSet、ADO オブジェクト、およびソース テーブル名を使用して、ADO Recordset オブジェクトまたは Record オブジェクト内の行と一致するように、DataSet 内の行を追加または更新します。

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

パラメーター

dataSet
DataSet

レコードおよび必要に応じてスキーマを格納するための DataSet

ADODBRecordSet
Object

ADO Recordset オブジェクトまたは Record オブジェクト。

srcTable
String

テーブル マップに使用するソース テーブル。

戻り値

DataSet で正常に追加または更新された行数。 これには、行を返さないステートメントの影響を受ける行は含まれません。

例外

ソース テーブルが無効です。

注釈

ActiveX Data Objects (ADO) と ADO.NET の間のリンクは、ADO から にDataSetデータをコピーできる一方向の操作ですが、データに対する更新は、ADO.NET で処理する必要があります。

メソッドはFill、 の メソッドRecordsetを呼び出NextRecordsetして複数の結果を反復処理し、操作の完了時に入力RecordsetFill閉じます。

操作によって Fill 、 内の指定したコピー先 DataTable オブジェクト DataSetに行が追加され、オブジェクトがまだ存在しない場合は作成 DataTable されます。 オブジェクトを DataTable 作成すると、通常、操作では Fill 列名メタデータのみが作成されます。 ただし、 プロパティが MissingSchemaActionAddWithKey設定されている場合は、適切な主キーと制約も作成されます。

主キー情報が存在する場合、重複する行は調整され、 に対応DataSetする に DataTable 1 回だけ表示されます。 主キー情報は、 の プロパティを指定するか、 プロパティを PrimaryKeyAddWithKey設定することによって、 を使用FillSchemaして設定MissingSchemaActionできます。DataTable

.NET Framework Data Provider for OLE DB で正しく機能するには、AddWithKeyネイティブ OLE DB プロバイダーが DBPROP_UNIQUEROWS プロパティを設定して必要な主キー情報を取得し、IColumnsRowset のDBCOLUMN_KEYCOLUMNを調べて主キー列を決定する必要があります。 または、ユーザーは、各 DataTableに主キー制約を明示的に設定することもできます。 これにより、既存のレコードと一致する入力レコードが、追加ではなく更新されるようになります。

SelectCommand が OUTER JOIN の結果を返す場合、 DataAdapter は、生成される PrimaryKeyDataTable値を設定しません。 重複する行が正しく解決されるように、主キーを明示的に定義する必要があります。 詳しくは、「主キーの定義」をご覧ください。

Recordsetが操作の開始Fill前に閉じている場合、エラーは発生しません。 これは、複数の結果を処理するために必要です。行を返さないクエリは、閉じた Recordsetによって示されるためです。 はOleDbDataAdapter、閉じた Recordset に対して を呼び出NextRecordsetし、処理を続行します。

データ セットの設定中にエラーが発生した場合、エラーが発生する前に追加された行は に DataSet残ります。 操作の残りの部分は中止されます。

オブジェクトが DbDataAdapter の設定中に重複する列を DataTable検出した場合、パターン "columnname1"、"columnname2"、"columnname3" などを使用して、後続の列の名前が生成されます。 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って に配置 DataSet されます。 複数の結果セットが各結果セットに DataSet 追加されると、個別のテーブルに配置されます。 追加の結果セットの名前は、指定したテーブル名 (たとえば、"Table"、"Table1"、"Table2"など) に整数値を追加することによって行われます。 列とテーブルの名前を使用するアプリケーションでは、これらの名前付けパターンとの競合が発生しないようにする必要があります。

ADO Recordset または Record オブジェクトの値は、 内のストレージ用の共通言語ランタイム型に DataSet変換されます。

注意

メソッドのこのオーバーロードは、 Fill 塗りつぶし操作の完了時に ADO オブジェクトに対して暗黙的にを呼び出 Close します。

次の例では、 をOleDbDataAdapter使用して、DataSetADO Record オブジェクトである ADO Recordset を使用して を塗りつぶします。 この例では、ADO RecordSet オブジェクトと Record オブジェクトが作成されていることを前提としています。

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()  
     Dim custDS As DataSet = New DataSet  
     'Use ADO objects from ADO library (msado15.dll) imported  
     ' as.NET library ADODB.dll using TlbImp.exe  
     Dim adoConn As ADODB.Connection = New ADODB.Connection()  
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)  
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)  
     custDA.Fill(custDS, adoRS, "Customers")  
     adoConn.Close()  
OleDbDataAdapter custDA = new OleDbDataAdapter();  
     DataSet custDS = new DataSet();  
     //Use ADO objects from ADO library (msado15.dll) imported  
     // as.NET library ADODB.dll using TlbImp.exe  
     ADODB.Connection adoConn = new ADODB.Connection();  
     ADODB.Recordset adoRS = new ADODB.Recordset();  
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);  
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);  
     custDA.Fill(custDS, adoRS, "Customers");  
     adoConn.Close();  

こちらもご覧ください

適用対象