4

アプリケーションのコードを見直していて、データベースへの接続に関して非常に奇妙なことに気づきました。

次のように、接続を開かずにクエリを実行しています。

using (sqlConnection1 = new SqlConnection(connString)
{
    SqlCommand comm = new SqlCommand(query,sqlConnection1);

    // ... parameters are handled here...

    SqlDataAdapter ad = new SqlDataAdapter(comm);
    ds = new DataSet();
    ad.FillSchema(ds, SchemaType.Source);
    ad.Fill(ds);
}

接続が開いていないために失敗するべきではありませんか? 私は実際にこれを別のプロジェクトでテストしましたが、うまくいきました。

4

4 に答える 4

8

接続が閉じている場合、SqlDataAdapter.Fill を使用すると接続が開きます http://msdn.microsoft.com/en-us/library/377a8x4t.aspx

于 2013-09-09T12:47:12.517 に答える
3

ドキュメントによると、SqlDataAdapter は接続がまだ開いていない場合は開き、以前の状態に戻します。

SelectCommand に関連付けられた接続オブジェクトは有効である必要がありますが、開いている必要はありません。FillSchema が呼び出される前に接続が閉じられた場合は、データを取得するために接続が開かれ、その後閉じられます。FillSchema が呼び出される前に接続が開いている場合は、開いたままになります。

Fillも同じように振る舞う

于 2013-09-09T12:47:58.473 に答える
1

メソッドからSqlDataAdapter.Fill;

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

メソッドもFillSchema同じことを行います。

于 2013-09-09T12:48:38.730 に答える