2009-06-05 7 views

答えて

4

デザイナーが生成したコードを見ると、接続があればアダプターはそれを再利用し、そうでなければ新しいものを作成することがわかります。クエリメソッドを実行するときに、接続が開いていない場合は、メソッドが開きます。メソッドがそれを開いた場合は、終了時にメソッドを閉じます。デフォルトでは、すべてのテーブルアダプタに対して新しい接続が確立されます。ここ

+0

一定期間内に接続プールを使用して接続を再利用しますか? –

+0

これは、接続マネージャが接続プーリングをどのように処理するかとは正反対です。同じ接続文字列を使用するので(毎回違うことがない限り)、同じプールから引き出されます。テーブルアダプタであるという単純な事実は、プールの処理方法を変更しません。興味があれば、MSDNのプーリングについての記事がありますが、テーブルアダプタに固有のものではありません(また、必要はありません):http://msdn.microsoft.com/en-us/library/8xx3tycaaspx – tvanfosson

+0

リンクをありがとう。 –

0

いや、TableAdapterのは、あなたが前にそれを開いた場合は接続を開いたままにし、アダプタに渡すと、オープンとclosaアダプタあなたが閉じられた接続を渡す場合、またはあなたが行うことができ、デフォルトのconenction

0

を残していますそれこのような:

using (var MyConnection = new SqlConnection("Connection String Here")) 
{ 
    var MyDataAdapter = new SqlDataAdapter("Select * from [stuff]", MyConnection); 
    MyDataAdapter.Fill(MyDataSet); 
} 

または

using (var MyConnection = new SqlConnection("Connection String Here")) 
{ 
    var MyDataAdapter = new SqlDataAdapter(); 
    var SelectCommand = MyConnection.CreateCommand(); 
    SelectCommand.CommandText = "select * from [stuff]"; 
    MyDataAdapter.SelectCommand = SelectCommand; 
    MyDataAdapter.Fill(MyDataSet); 
} 

接続寿命は、開いていないと開いて閉じます。

+0

私は彼がSqlDataAdapterではなくデザイナで生成されたテーブルアダプタについて話していると思います。 – tvanfosson

+0

Bah、私は質問からそれを得ていませんでしたが、選択された答えによってあなたは正しいと思われます。 – JasonRShaver

1

は、典型的なデザイナー、生成されたテーブルアダプタの機能のコードである:

MSDNによれば、このようなDbDataAdapter.Fill挙動:

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

参考:Fill Method (DataTable)

しかし、デザイナーで生成されたインサートに/ /更新を削除し、コードは次のようになります。

global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State; 
     if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
        != global::System.Data.ConnectionState.Open)) { 
      this.Adapter.InsertCommand.Connection.Open(); 
     } 
     try { 
      int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery(); 
      return returnValue; 
     } 
     finally { 
      if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) { 
       this.Adapter.InsertCommand.Connection.Close(); 
      } 
     } 
0

とき

Dim Dt As dataset1.UsersDataTable 
With New dataset1TableAdapters.UsersTableAdapter 
    Dt = .GetData() 
End With 

何が起こりますか接続は開いたままにしましたか?それとも閉じた?

関連する問題