次の方法で共有


OleDbDataAdapter.Fill メソッド (DataSet, Object, String)

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

Overloads Public Function Fill( _
   ByVal dataSet As DataSet, _   ByVal ADODBRecordSet As Object, _   ByVal srcTable As String _) As Integer
[C#]
public int Fill(DataSetdataSet,objectADODBRecordSet,stringsrcTable);
[C++]
public: int Fill(DataSet* dataSet,Object* ADODBRecordSet,String* srcTable);
[JScript]
public function Fill(
   dataSet : DataSet,ADODBRecordSet : Object,srcTable : String) : int;

パラメータ

  • dataSet
    レコードおよび必要に応じてスキーマを格納するための DataSet
  • ADODBRecordSet
    ADO Recordset オブジェクトまたは Record オブジェクト。
  • srcTable
    テーブル マップに使用するソース テーブル。

戻り値

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

例外

例外の種類 条件
SystemException ソース テーブルが無効でした。

解説

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

Fill メソッドは、Recordset に対して NextRecordset メソッドを呼び出すことによって複数の結果を反復的に処理し、 Fill 操作が完了したときに入力 Recordset を閉じます。

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

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

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

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

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

データ セットのへのデータの格納中にエラーが発生した場合は、エラーの発生前に追加された行は、その DataSet に残ります。残りの操作は中止されます。

DataTable へのデータの格納中に重複する列が見つかった場合、2 番目以降の列には、 DbDataAdapter オブジェクトによって、columnname1、columnname2、columnname3 のような形式で名前が生成されます。受信したデータに無名の列が含まれていた場合は、Column1、Column2 のような形式の名前で DataSet に列が格納されます。 DataSet に複数結果セットを追加するときは、各結果セットが個別のテーブルに格納されます。2 番目以降の結果セットには、指定されたテーブル名に整数値を追加した名前が付けられます。たとえば、Table、Table1、Table2 のようになります。アプリケーションで列名およびテーブル名を使用するときは、これらの形式の名前と衝突しないように注意する必要があります。

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

メモ    Fill メソッドのこのオーバーロードでは、Fill 操作が完了したときに、ADO オブジェクトに対して暗黙的に Close が呼び出されます。

OleDbDataAdapter を使用して、ADO Record オブジェクトである ADO Recordset によって DataSet にデータを格納する例を次に示します。この例では、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()
[C#] 
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();

必要条件

プラットフォーム: 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 オーバーロードの一覧