3

テーブル アダプタは接続をどのように利用しますか?

それを少し説明するために、それらは自動的に接続を開いたり閉じたりしますか、それとも tableadapter メソッドを呼び出す前に既に接続を開いている場合は、それを使用して開いたままにしますか?

よろしく

4

5 に答える 5

5

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

于 2009-06-05T15:24:17.403 に答える
1

以下は、デザイナーが生成した典型的なテーブル アダプターの関数のコードです。

[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 が呼び出される前に接続が開いている場合は、開いたままになります。

参照: Fill メソッド (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();
            }
        }
于 2009-06-05T15:42:50.503 に答える
0

はい、tableadapter は、以前に接続を開いてアダプターに渡す場合は接続を開いたままにし、閉じた接続を渡す場合はアダプターを開いて閉じるか、デフォルトの接続をそのままにします

于 2009-06-05T15:23:39.947 に答える
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);
}

接続の寿命に関しては、開いていない場合は、開いて閉じます。

于 2009-06-05T15:23:54.550 に答える
0

いつ何が起こるか

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

接続は開いたままですか?それとも閉まった?

于 2010-12-28T08:51:53.913 に答える