次の方法で共有


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

DataSet 名、ソース テーブル名、コマンド文字列、およびコマンド動作を使用して、データ ソース内の列と一致するように、 DataSet 内の指定した範囲の行を追加または更新します。

Overloads Protected Overridable Function Fill( _
   ByVal dataSet As DataSet, _   ByVal startRecord As Integer, _   ByVal maxRecords As Integer, _   ByVal srcTable As String, _   ByVal command As IDbCommand, _   ByVal behavior As CommandBehavior _) As Integer
[C#]
protected virtual int Fill(DataSetdataSet,intstartRecord,intmaxRecords,stringsrcTable,IDbCommandcommand,CommandBehaviorbehavior);
[C++]
protected: virtual int Fill(DataSet* dataSet,intstartRecord,intmaxRecords,String* srcTable,IDbCommand* command,CommandBehaviorbehavior);
[JScript]
protected function Fill(
   dataSet : DataSet,startRecord : int,maxRecords : int,srcTable : String,command : IDbCommand,behavior : CommandBehavior) : int;

パラメータ

  • dataSet
    レコードおよび必要に応じてスキーマを格納するための DataSet
  • startRecord
    取得を開始する、0 から始まるレコード番号。
  • maxRecords
    取得するレコードの最大数。
  • srcTable
    テーブル マップに使用するソース テーブルの名前。
  • command
    データ ソースから行を取得するために使用する SQL SELECT ステートメント。
  • behavior
    CommandBehavior 値の 1 つ。

戻り値

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

例外

例外の種類 条件
InvalidOperationException ソース テーブルが無効です。
ArgumentException startRecord パラメータが 0 未満でした。

または

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

解説

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

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

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

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.

Fill メソッドは、同じ DataTable に対して複数回使用できます。主キーが存在する場合は、受信した行が既存の一致する行とマージされます。主キーが存在しない場合は、受信した行が DataTable に追加されます。

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

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

実装時の注意: Fill メソッドのこのオーバーロードはプロテクトされており、.NET Framework データ プロバイダでの使用を想定しています。

必要条件

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