次の方法で共有


DbDataAdapter.Fill メソッド (DataSet, Int32, Int32, String)

DataSet 名および DataTable 名を使用して、データ ソース内の行と一致するように、 DataSet 内の指定した範囲の行を追加または更新します。

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

パラメータ

  • dataSet
    レコードおよび必要に応じてスキーマを格納するための DataSet
  • startRecord
    取得を開始する、0 から始まるレコード番号。
  • maxRecords
    取得するレコードの最大数。
  • srcTable
    テーブル マップに使用するソース テーブルの名前。

戻り値

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

例外

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

または

接続が無効でした。

InvalidCastException 接続が見つかりませんでした。
ArgumentException startRecord パラメータが 0 未満でした。

または

maxRecords パラメータが 0 未満でした。

解説

maxRecords の値が 0 の場合は、開始レコード以降に見つかったすべてのレコードが取得されます。 maxRecords が残りの行数より大きい場合は、残りの行が返され、エラーは発生しません。

対応する SELECT コマンドが複数の結果を返す場合、 Fill では、最初の結果だけに maxRecords が適用されます。

Fill メソッドは、SELECT ステートメントを使用して、データ ソースからデータを取得します。SELECT ステートメントに関連付けられた IDbConnection オブジェクトは、有効なものである必要がありますが、開いている必要はありません。 Fill を呼び出す前に IDbConnection が閉じていた場合は、接続が開かれ、データを取得した後で再び閉じられます。 Fill を呼び出す前に接続が開いていた場合は、接続は開いたままになります。

コマンドが行を返さない場合は、 DataSet にテーブルは追加されず、例外は生成されません。

DataTable へのデータの格納中に重複する列が見つかった場合、2 番目以降の列には、 DbDataAdapter オブジェクトによって、columnname1、columnname2、columnname3 のような形式で名前が生成されます。受信したデータに無名の列が含まれていた場合は、Column1、Column2 のような形式の名前で DataSet に列が格納されます。

指定したクエリが複数の結果を返す場合は、各結果セットが個別のテーブルに格納されます。2 番目以降の結果セットには、指定されたテーブル名に整数値を追加した名前が付けられます。たとえば、Table、Table1、Table2 のようになります。行を返さないクエリではテーブルは作成されません。したがって、挿入クエリの後で選択クエリを処理した場合、選択クエリで作成されるテーブルが最初に作成されるテーブルになるため、このテーブルが Table という名前になります。アプリケーションで列名およびテーブル名を使用するときは、これらの形式の名前と衝突しないように注意する必要があります。

Fill メソッドは、大文字と小文字の違いを除いて名前が一致する DataTable オブジェクトが DataSet 内に複数含まれる場合に、それらを区別します。この場合、 Fill は、大文字と小文字を区別して比較を実行し、対応するテーブルを見つけます。正確に一致するテーブルが存在しない場合は、新しく作成します。この動作を表す C# コードの例を次に示します。

DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
dataset.Tables.Add("AAA");
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".

Fill を呼び出したときに、大文字と小文字の違いを除いて名前が一致する DataTableDataSet 内に 1 つだけ含まれている場合は、その DataTable が更新されます。この場合は、比較のときに大文字と小文字が区別されません。この動作を表す C# コードの例を次に示します。

DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

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

バッチ SQL ステートメントのように、 DataSet へのデータの格納に使用する SELECT ステートメントが複数の結果を返す場合は、次の点に注意してください。

  • バッチ SQL ステートメントが複数の結果を返す場合、 maxRecords は、最初の結果だけに適用されます。これは、複数に分けられた結果が含まれる行についても同様です (.NET Framework Data Provider for OLE DB だけ)。最上位の結果は maxRecords によって制限されますが、子の行はすべて追加されます。
  • 結果の 1 つにエラーが含まれていた場合、それ以降の結果はすべてスキップされ、 DataSet に追加されません。

初回以降、 Fill 呼び出しを使用して DataSet の内容を更新する場合は、次の 2 つの条件を満たす必要があります。

  1. SQL ステートメントは、初回に DataSet にデータを格納するために使用したステートメントと一致させる必要があります。
  2. キー列情報が存在している必要があります。

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

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

メモ   複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の FillSchema の実装では、最初の結果のスキーマ情報だけが取得されます。複数の結果のスキーマ情報を取得するには、 MissingSchemaActionAddWithKey に設定して Fill を使用します。

メモ    DataSet には、 maxRecords で指定したレコード数までのレコードだけが格納されます。ただし、クエリによって生成される結果セット全体は、それ以後もサーバーから返されます。

継承時の注意: 派生クラスで Fill をオーバーライドする場合は、基本クラスの Fill メソッドを呼び出してください。

使用例

[Visual Basic, C#, C++] OleDbDataAdapter 派生クラスを使用して、 DataSetcategories テーブルのデータ ソースの行を、10 行目から開始して 15 行格納する例を示します。この例では、 OleDbDataAdapter および DataSet が作成されていることを前提にしています。

 
Public Sub GetMyRecords()
    ' ...
    ' create myDataSet and myDataAdapter
    ' ...
    myDataAdapter.Fill(myDataSet, 9, 15, "Categories")
End Sub

[C#] 
public void GetMyRecords() {
   // ...
   // create myDataSet and myDataAdapter
   // ...
   myDataAdapter.Fill(myDataSet,9,15,"Categories");
}

[C++] 
void GetMyRecords() {
   // ...
   // create myDataSet and myDataAdapter
   // ...
   myDataAdapter->Fill(myDataSet,9,15,S"Categories");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

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

参照

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