次の方法で共有


OleDbDataAdapter.Fill メソッド (DataTable, Object)

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

Overloads Public Function Fill( _
   ByVal dataTable As DataTable, _   ByVal ADODBRecordSet As Object _) As Integer
[C#]
public int Fill(DataTabledataTable,objectADODBRecordSet);
[C++]
public: int Fill(DataTable* dataTable,Object* ADODBRecordSet);
[JScript]
public function Fill(
   dataTable : DataTable,ADODBRecordSet : Object) : int;

パラメータ

  • dataTable
    レコードおよび必要に応じてスキーマを格納するための DataTable
  • ADODBRecordSet
    ADO Recordset オブジェクトまたは Record オブジェクト。

戻り値

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

解説

ActiveX データ オブジェクト (ADO) と ADO.NET 間のリンクでは、ADO 内のデータを DataSet にコピーする、一方向の操作が行われます。ただし、データの更新は、ADO.NET で処理する必要があります。詳細については、「 ADO レコードセットまたはレコードを使用した DataSet の設定 」を参照してください。

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

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

Fill は、 DataSet 内にある指定された DataTable オブジェクトに行を追加します。 DataTable オブジェクトが存在しない場合は、新しく作成します。 DataTable オブジェクトを作成する場合、 Fill は、通常、列名メタデータだけを作成します。ただし、 MissingSchemaAction プロパティが AddWithKey に設定されている場合は、適切な主キーおよび制約も作成します。

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

SelectCommand から OUTER JOIN の結果が返された場合、 DataAdapter は、結果の DataTablePrimaryKey の値を設定しません。行の重複が正しく解決されるようにするには、明示的に主キーを定義する必要があります。詳細については、「 テーブルの主キーの定義 」を参照してください。

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

DataTable へのデータの格納中に重複する列が見つかった場合、2 番目以降の列には、 DbDataAdapter によって、columnname1、columnname2、columnname3 のような形式で名前が生成されます。列名が空の場合は、最初の列は空の文字列になり、それ以降は 1、2、3 と続く名前が付けられ、 DataTable に追加されます。

ADO Recordset オブジェクトまたは Record オブジェクトの値は、 DataSet に格納するために、共通言語ランタイム型に変換されます。ADO および共通言語ランタイム型のマップの詳細については、「 ADO.NET から ADO レコードセットまたはレコードへのアクセス 」を参照してください。

注意    Fill メソッドのこのオーバーロードでは、Fill 操作が完了したときに、ADO オブジェクトに対して暗黙的に Close が呼び出されることはありません。そのため、ADO の Recordset オブジェクトまたは Record オブジェクトの使用が終わったら、必ず Close を呼び出してください。これによって、基になるデータ ソースへの接続が適切な時点で解放され、既存の参照が存在する場合に、アンマネージ ADO オブジェクトがガベージ コレクションによって解放されるために発生するアクセス違反を防ぐことができます。

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()
[C#] 
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();

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

OleDbDataAdapter クラス | OleDbDataAdapter メンバ | System.Data.OleDb 名前空間 | OleDbDataAdapter.Fill オーバーロードの一覧 | FillSchema