OleDbDataAdapter.Fill メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ADO Recordset
オブジェクトまたは Record
オブジェクト内の行と一致するように、DataSet 内の行を追加または更新します。
オーバーロード
Fill(DataTable, Object) |
指定した DataTable および ADO オブジェクトを使用して、ADO |
Fill(DataSet, Object, String) |
指定した DataSet、ADO オブジェクト、およびソース テーブル名を使用して、ADO |
Fill(DataTable, Object)
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
パラメーター
- ADODBRecordSet
- Object
ADO Recordset
オブジェクトまたは Record
オブジェクト。
戻り値
DataTable で正常に更新された行数。 これには、行を返さないステートメントの影響を受ける行は含まれません。
注釈
ActiveX Data Objects (ADO) と ADO.NET の間のリンクは、ADO から にDataSetデータをコピーできる一方向の操作ですが、データに対する更新は、ADO.NET で処理する必要があります。
メソッドの Fill このオーバーロードは、操作の完了時に入力 Recordset
を Fill 閉じません。
複数の結果を返すバッチ SQL ステートメントを処理する場合、OLE DB.NET Framework データ プロバイダーの と FillSchema のこの実装Fillでは、最初の結果のみのスキーマ情報が取得されます。
操作によって Fill 、 内の指定したコピー先 DataTable オブジェクト DataSetに行が追加され、オブジェクトがまだ存在しない場合は作成 DataTable されます。 オブジェクトを DataTable 作成すると、通常、操作では Fill 列名メタデータのみが作成されます。 ただし、 プロパティが MissingSchemaAction に AddWithKey
設定されている場合は、適切な主キーと制約も作成されます。
メソッドは Fill 、同じ DataTableで複数回使用できます。 主キーが存在する場合、受信行は、既に存在する一致する行とマージされます。 主キーが存在しない場合、受信行は に DataTable追加されます。 主キー情報が存在する場合、重複する行は調整され、 に対応DataSetする に DataTable 1 回だけ表示されます。 主キー情報は、 の プロパティを指定するか、 プロパティを PrimaryKey にAddWithKey
設定することによって、 を使用FillSchemaして設定MissingSchemaActionできます。DataTable
SelectCommand が OUTER JOIN の結果を返す場合、 DataAdapter
は、生成される PrimaryKey に DataTable値を設定しません。 重複する行が正しく解決されるように、主キーを明示的に定義する必要があります。 詳しくは、「主キーの定義」をご覧ください。
.NET Framework Data Provider for OLE DB で正しく機能するには、AddWithKey
ネイティブ OLE DB プロバイダーが DBPROP_UNIQUEROWS プロパティを設定して必要な主キー情報を取得し、 のIColumnsRowset
DBCOLUMN_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)
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
パラメーター
- ADODBRecordSet
- Object
ADO Recordset
オブジェクトまたは Record
オブジェクト。
- srcTable
- String
テーブル マップに使用するソース テーブル。
戻り値
DataSet で正常に追加または更新された行数。 これには、行を返さないステートメントの影響を受ける行は含まれません。
例外
ソース テーブルが無効です。
注釈
ActiveX Data Objects (ADO) と ADO.NET の間のリンクは、ADO から にDataSetデータをコピーできる一方向の操作ですが、データに対する更新は、ADO.NET で処理する必要があります。
メソッドはFill、 の メソッドRecordset
を呼び出NextRecordset
して複数の結果を反復処理し、操作の完了時に入力Recordset
をFill閉じます。
操作によって Fill 、 内の指定したコピー先 DataTable オブジェクト DataSetに行が追加され、オブジェクトがまだ存在しない場合は作成 DataTable されます。 オブジェクトを DataTable 作成すると、通常、操作では Fill 列名メタデータのみが作成されます。 ただし、 プロパティが MissingSchemaAction に AddWithKey
設定されている場合は、適切な主キーと制約も作成されます。
主キー情報が存在する場合、重複する行は調整され、 に対応DataSetする に DataTable 1 回だけ表示されます。 主キー情報は、 の プロパティを指定するか、 プロパティを PrimaryKey にAddWithKey
設定することによって、 を使用FillSchemaして設定MissingSchemaActionできます。DataTable
.NET Framework Data Provider for OLE DB で正しく機能するには、AddWithKey
ネイティブ OLE DB プロバイダーが DBPROP_UNIQUEROWS プロパティを設定して必要な主キー情報を取得し、IColumnsRowset のDBCOLUMN_KEYCOLUMNを調べて主キー列を決定する必要があります。 または、ユーザーは、各 DataTableに主キー制約を明示的に設定することもできます。 これにより、既存のレコードと一致する入力レコードが、追加ではなく更新されるようになります。
SelectCommand が OUTER JOIN の結果を返す場合、 DataAdapter
は、生成される PrimaryKey に DataTable値を設定しません。 重複する行が正しく解決されるように、主キーを明示的に定義する必要があります。 詳しくは、「主キーの定義」をご覧ください。
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();
こちらもご覧ください
適用対象
.NET