DbDataAdapter.Fill メソッド (DataSet, String)
DataSet 名および DataTable 名を使用して、データ ソース内の列と一致するように DataSet 内の行を追加または更新します。
Overloads Public Function Fill( _
ByVal dataSet As DataSet, _ ByVal srcTable As String _) As Integer
[C#]
public int Fill(DataSetdataSet,stringsrcTable);
[C++]
public: int Fill(DataSet* dataSet,String* srcTable);
[JScript]
public function Fill(
dataSet : DataSet,srcTable : String) : int;
パラメータ
- dataSet
レコードおよび必要に応じてスキーマを格納するための DataSet 。 - srcTable
テーブル マップに使用するソース テーブルの名前。
戻り値
DataSet で正常に追加または更新された行数。これには、行を返さないステートメントの影響を受ける行は含まれません。
例外
例外の種類 | 条件 |
---|---|
SystemException | ソース テーブルが無効でした。 |
解説
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 を呼び出したときに、大文字と小文字の違いを除いて名前が一致する DataTable が DataSet 内に 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 ステートメントが複数の結果を返す場合は、次の点に注意してください。
- 結果の 1 つにエラーが含まれていた場合、それ以降の結果はすべてスキップされ、 DataSet に追加されません。
初回以降、 Fill 呼び出しを使用して DataSet の内容を更新する場合は、次の 2 つの条件を満たす必要があります。
- SQL ステートメントは、初回に DataSet にデータを格納するために使用したステートメントと一致させる必要があります。
- キー列情報が存在している必要があります。主キー情報が存在する場合、重複行は、 DataSet に対応する DataTable 内に 1 つだけ現れるように調整されます。主キー情報は、 FillSchema を使用するか、 DataTable の PrimaryKey プロパティを指定するか、または MissingSchemaAction プロパティを AddWithKey に設定することによって、設定できます。
SelectCommand が OUTER JOIN の結果を返す場合、 DataAdapter は結果の DataTable に対して PrimaryKey 値を設定しません。行の重複が正しく解決されるようにするには、明示的に主キーを定義する必要があります。詳細については、「 テーブルの主キーの定義 」を参照してください。
メモ 複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の FillSchema の実装では、最初の結果のスキーマ情報だけが取得されます。複数の結果のスキーマ情報を取得するには、 MissingSchemaAction を AddWithKey に設定して Fill を使用します。
継承時の注意: 派生クラスで Fill をオーバーライドする場合は、基本クラスの Fill メソッドを呼び出してください。
使用例
[Visual Basic, C#, C++] OleDbDataAdapter 派生クラスを使用して、 DataSet に categories テーブルの行を格納する例を次に示します。この例では、 OleDbDataAdapter および DataSet が作成されていることを前提にしています。
Public Sub GetMyRecords()
' ...
' create myDataSet and myDataAdapter
' ...
myDataAdapter.Fill(myDataSet, "Categories")
End Sub
[C#]
public void GetMyRecords() {
// ...
// create myDataSet and myDataAdapter
// ...
myDataAdapter.Fill(myDataSet, "Categories");
}
[C++]
void GetMyRecords() {
// ...
// create myDataSet and myDataAdapter
// ...
myDataAdapter->Fill(myDataSet, 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 オーバーロードの一覧