テーブル・アダプターはどのように接続を使用しますか?デザイナー生成テーブル・アダプターによる接続の処理方法
ちょっと説明すると、自動的に接続を開いたり閉じたりするのですか?あるいは、tableadapterメソッドを呼び出す前にすでに接続を開いている場合は、それを使用して開いたままにしますか?
よろしく
テーブル・アダプターはどのように接続を使用しますか?デザイナー生成テーブル・アダプターによる接続の処理方法
ちょっと説明すると、自動的に接続を開いたり閉じたりするのですか?あるいは、tableadapterメソッドを呼び出す前にすでに接続を開いている場合は、それを使用して開いたままにしますか?
よろしく
デザイナーが生成したコードを見ると、接続があればアダプターはそれを再利用し、そうでなければ新しいものを作成することがわかります。クエリメソッドを実行するときに、接続が開いていない場合は、メソッドが開きます。メソッドがそれを開いた場合は、終了時にメソッドを閉じます。デフォルトでは、すべてのテーブルアダプタに対して新しい接続が確立されます。ここ
いや、TableAdapterのは、あなたが前にそれを開いた場合は接続を開いたままにし、アダプタに渡すと、オープンとclosaアダプタあなたが閉じられた接続を渡す場合、またはあなたが行うことができ、デフォルトのconenction
を残していますそれこのような:
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);
}
接続寿命は、開いていないと開いて閉じます。
私は彼がSqlDataAdapterではなくデザイナで生成されたテーブルアダプタについて話していると思います。 – tvanfosson
Bah、私は質問からそれを得ていませんでしたが、選択された答えによってあなたは正しいと思われます。 – JasonRShaver
は、典型的なデザイナー、生成されたテーブルアダプタの機能のコードである:
MSDNによれば、このようなDbDataAdapter.Fill
挙動:
Fillメソッドは、使用して、データソースから行を取得します関連するSelectCommandプロパティで指定されたSELECTステートメントSELECTステートメントに関連付けられた接続オブジェクトは有効である必要がありますが、開く必要はありません。 Fillが呼び出される前に接続が閉じられている場合は、データを取得して閉じます。 Fillが呼び出される前に接続が開いている場合、接続は開いたままです。
しかし、デザイナーで生成されたインサートに/ /更新を削除し、コードは次のようになります。
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();
}
}
とき
Dim Dt As dataset1.UsersDataTable
With New dataset1TableAdapters.UsersTableAdapter
Dt = .GetData()
End With
何が起こりますか接続は開いたままにしましたか?それとも閉じた?
一定期間内に接続プールを使用して接続を再利用しますか? –
これは、接続マネージャが接続プーリングをどのように処理するかとは正反対です。同じ接続文字列を使用するので(毎回違うことがない限り)、同じプールから引き出されます。テーブルアダプタであるという単純な事実は、プールの処理方法を変更しません。興味があれば、MSDNのプーリングについての記事がありますが、テーブルアダプタに固有のものではありません(また、必要はありません):http://msdn.microsoft.com/en-us/library/8xx3tycaaspx – tvanfosson
リンクをありがとう。 –