1

でクエリを実行しようとしFillています。私が理解していないのは、クエリするテーブルをすでに指定しているのに、なぜテーブル名を具体的に指定する必要があるのか​​ということです。DataSetSqlDataAdaptorFillSqlDataAdapter

以下のコードを参照してください。クエリ文字列にはすでに「FooTable」が含まれていますが、SqlDataAdapter.Fillに「FooTable」が再度必要なのはなぜですか。

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FooTable", connectionString);
DataSet ds = new DataSet();
da.Fill(ds, "FooTable");
4

1 に答える 1

4

実際には、この場合、処理する結果セットが 1 つしかないため、これを行う必要はありません。MSDN からの関連する抜粋を次に示します。

指定したクエリが複数の結果を返す場合、各結果セットは個別のテーブルに配置されます。追加の結果セットは、指定されたテーブル名に整数値を追加することによって名前が付けられます (たとえば、"Table"、"Table1"、"Table2" など)。行を返さないクエリに対してはテーブルが作成されないため、挿入クエリの後に選択クエリを処理する場合、選択クエリに対して作成されるテーブルは、最初に作成されるテーブルであるため、「テーブル」という名前になります。列名とテーブル名を使用するアプリケーションでは、これらの命名パターンとの競合が発生しないようにする必要があります。Fill メソッドは、名前が大文字と小文字のみ異なる複数の DataTable オブジェクトが DataSet に含まれるシナリオをサポートします。このような状況では、Fill は大文字と小文字を区別して比較を実行し、対応するテーブルを見つけます。

上記は、MSDN の SqlDataAdaptor.Fill() ドキュメントのこのページから取得したものです。

したがって、クエリがストアド プロシージャまたは複数の結果セットを生成するその他の種類のクエリである場合は、Fill コマンドで使用する結果セットを指定する必要があります。それが、2 番目のパラメーターの機能です。それ以外の場合は、Fill コマンド自体によって仮定が行われます。

通常、テーブルから選択するだけの場合、resulsetは選択元のソース テーブルと同じ名前になります。

于 2011-04-22T03:23:00.083 に答える