OleDbDataAdapter.Fill メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ADO DataSet または Recordset オブジェクトの行と一致するように、Record内の行を追加または更新します。
オーバーロード
| 名前 | 説明 |
|---|---|
| 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 の Fill と FillSchemaのこの実装では.NET Framework Data Providerは最初の結果についてのみスキーマ情報を取得します。
Fill操作では、DataTable内の指定したコピー先DataSet オブジェクトに行が追加され、DataTable オブジェクトがまだ存在しない場合は作成されます。
DataTable オブジェクトを作成すると、通常、Fill操作では列名メタデータのみが作成されます。 ただし、 MissingSchemaAction プロパティが AddWithKey に設定されている場合は、適切な主キーと制約も作成されます。
同じFillで DataTable メソッドを複数回使用できます。 主キーが存在する場合、受信行は、既に存在する一致する行とマージされます。 主キーが存在しない場合は、受信行が DataTableに追加されます。 主キー情報が存在する場合、重複する行はすべて調整され、DataTableに対応するDataSetに 1 回だけ表示されます。 主キー情報は、FillSchema、PrimaryKeyの DataTable プロパティを指定するか、MissingSchemaAction プロパティを AddWithKey に設定することによって設定できます。
SelectCommand が OUTER JOIN の結果を返す場合、 DataAdapter は、生成される PrimaryKey に DataTable値を設定しません。 重複する行が正しく解決されるように、主キーを明示的に定義する必要があります。 詳しくは、「主キーの定義」をご覧ください。
.NET Framework for OLE DB Data Providerで正しく機能するには、AddWithKey では、ネイティブ OLE DB プロバイダーが DBPROP_UNIQUEROWS プロパティを設定して必要な主キー情報を取得し、IColumnsRowset のDBCOLUMN_KEYCOLUMNを調べて主キー列を決定する必要があります。 または、ユーザーは、各 DataTableに主キー制約を明示的に設定することもできます。 これにより、既存のレコードと一致する受信レコードが追加されるのではなく更新されます。
OleDbDataAdapterがDataTableの設定中に重複する列を検出すると、パターン "columnname1"、"columnname2"、"columnname3" などを使用して、後続の列の名前が生成されます。 空の列名は、最初の列に空の文字列を使用して DataTableに追加され、その後の空の列には "1"、"2"、"3" などが続きます。
ADO Recordset オブジェクトまたは Record オブジェクトの値は、 DataSet内のストレージ用の共通言語ランタイム型に変換されます。
Caution
Fill メソッドのこのオーバーロードは、フィル操作が完了したときに ADO オブジェクトのCloseを暗黙的に呼び出しません。 そのため、ADO Close または Recordset オブジェクトの使用が完了したら、常にRecordを呼び出します。 これにより、データ ソースへの基になる接続がタイムリーに解放され、また、既存の参照がまだ存在する場合に、アンマネージ ADO オブジェクトがガベージ コレクションによって再利用されるために、アクセス違反が発生する可能性を防ぐことができます。
TableMappings.Addで DataAdapter メソッドを呼び出し、ソース テーブル パラメーターを空の文字列に明示的にマップすると、ソース テーブルを使用してデータセットが正常に入力されますが、データセットには何も設定されません。 たとえば、次の例では、 rDataSet には何も設定されません。
rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");
この例では、複数の結果を処理するときに結果をスキップする方法を示します。
次の例では、OleDbDataAdapterを使用して、ADO OleDbDataAdapterを使用してRecordsetを塗りつぶします。 この例では、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 メソッドは、NextRecordsetでRecordset メソッドを呼び出して複数の結果を反復処理し、Recordset操作の完了時に入力Fillを閉じます。
Fill操作では、DataTable内の指定したコピー先DataSet オブジェクトに行が追加され、DataTable オブジェクトがまだ存在しない場合は作成されます。
DataTable オブジェクトを作成すると、通常、Fill操作では列名メタデータのみが作成されます。 ただし、 MissingSchemaAction プロパティが AddWithKey に設定されている場合は、適切な主キーと制約も作成されます。
主キー情報が存在する場合、重複する行はすべて調整され、DataTableに対応するDataSetに 1 回だけ表示されます。 主キー情報は、FillSchema、PrimaryKeyの DataTable プロパティを指定するか、MissingSchemaAction プロパティを AddWithKey に設定することによって設定できます。
.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は、閉じたNextRecordsetでRecordsetを呼び出すだけで、処理を続行します。
データ・セットの設定中にエラーが発生した場合、エラーが発生する前に追加された行は DataSetに残ります。 残りの操作は中止されます。
DbDataAdapterの設定中に DataTable オブジェクトで重複する列が検出された場合、"columnname1"、"columnname2"、"columnname3" などのパターンを使用して、後続の列の名前が生成されます。 受信データに名前のない列が含まれている場合は、"Column1"、"Column2" などのパターンに従って、 DataSet に配置されます。 複数の結果セットが DataSet に追加されると、各結果セットは個別のテーブルに配置されます。 追加の結果セットには、指定したテーブル名に整数値 ("Table"、"Table1"、"Table2" など) を追加することで名前が付けられます。 列名とテーブル名を使用するアプリケーションでは、これらの名前付けパターンとの競合が発生しないようにする必要があります。
ADO Recordset オブジェクトまたは Record オブジェクトの値は、 DataSet内のストレージ用の共通言語ランタイム型に変換されます。
Note
Fill メソッドのこのオーバーロードは、フィル操作が完了すると、ADO オブジェクトのCloseを暗黙的に呼び出します。
次の例では、OleDbDataAdapterを使用して、ADO DataSet オブジェクトである ADO Recordsetを使用してRecordを塗りつぶします。 この例では、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();