表适配器如何使用连接?
为了解释一下,他们是否自动打开和关闭连接,或者如果我在调用tableadapter方法之前已经打开连接,他们是否使用它并将其保持打开状态?
此致
答案 0 :(得分:4)
如果查看设计器生成的代码,您会看到如果有连接,适配器会重用它,否则会创建一个新连接。执行查询方法时,如果连接未打开,则该方法将打开它。如果方法打开它,它会在完成后关闭它。默认情况下,您为每个表适配器获得一个新连接。
答案 1 :(得分: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之前连接已打开,则它将保持打开状态。
但是,在设计器生成的插入/删除/更新中,代码如下所示:
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();
}
}
答案 2 :(得分:0)
是的,如果您之前打开并传递给适配器,则tableadapter会保持连接打开,如果您通过了关闭连接,则打开和closa适配器,或保留默认连接
答案 3 :(得分: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);
}
至于连接寿命,如果没有打开,它会为你打开和关闭它。
答案 4 :(得分:0)
时会发生什么
Dim Dt As dataset1.UsersDataTable
With New dataset1TableAdapters.UsersTableAdapter
Dt = .GetData()
End With
连接是否打开?还是它关闭了?