テーブル アダプタは接続をどのように利用しますか?
それを少し説明するために、それらは自動的に接続を開いたり閉じたりしますか、それとも tableadapter メソッドを呼び出す前に既に接続を開いている場合は、それを使用して開いたままにしますか?
よろしく
テーブル アダプタは接続をどのように利用しますか?
それを少し説明するために、それらは自動的に接続を開いたり閉じたりしますか、それとも tableadapter メソッドを呼び出す前に既に接続を開いている場合は、それを使用して開いたままにしますか?
よろしく
デザイナーが生成したコードを見ると、接続がある場合はアダプターがそれを再利用し、そうでない場合は新しい接続を作成することがわかります。クエリ メソッドを実行するとき、接続が開いていない場合、メソッドは接続を開きます。メソッドが開いた場合は、完了時に閉じます。デフォルトでは、テーブル アダプタごとに新しい接続を取得します。
以下は、デザイナーが生成した典型的なテーブル アダプターの関数のコードです。
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
[global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
public virtual Styles.OrdersDataTable GetOrders() {
this.Adapter.SelectCommand = this.CommandCollection[0];
Styles.OrdersDataTable dataTable = new Styles.OrdersDataTable();
this.Adapter.Fill(dataTable);
return dataTable;
}
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();
}
}
はい、tableadapter は、以前に接続を開いてアダプターに渡す場合は接続を開いたままにし、閉じた接続を渡す場合はアダプターを開いて閉じるか、デフォルトの接続をそのままにします
次のように実行できます。
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);
}
接続の寿命に関しては、開いていない場合は、開いて閉じます。
いつ何が起こるか
Dim Dt As dataset1.UsersDataTable
With New dataset1TableAdapters.UsersTableAdapter
Dt = .GetData()
End With
接続は開いたままですか?それとも閉まった?