如果我不打开 SqlConnection 的实例会发生什么
本文关键字:实例 什么 SqlConnection 如果 | 更新日期: 2023-09-27 18:30:44
我正在审查应用程序中的一段代码,在连接到数据库方面遇到了一些非常奇怪的问题。
它正在执行查询而不打开连接,如下所示:
using (sqlConnection1 = new SqlConnection(connString)
{
SqlCommand comm = new SqlCommand(query,sqlConnection1);
// ... parameters are handled here...
SqlDataAdapter ad = new SqlDataAdapter(comm);
ds = new DataSet();
ad.FillSchema(ds, SchemaType.Source);
ad.Fill(ds);
}
它不应该因为连接未打开而失败吗?我实际上在单独的项目中对此进行了测试,并且它起作用了。
如果连接已关闭,使用 SqlDataAdapter.Fill 将打开连接http://msdn.microsoft.com/en-us/library/377a8x4t.aspx
根据文档,如果尚未打开,SqlDataAdapter 将打开连接,并将其返回到以前的状态。
与 SelectCommand 关联的连接对象必须有效,但不需要打开。如果在调用 FillSchema 之前关闭了连接,则会打开它以检索数据,然后关闭它。如果在调用 FillSchema 之前连接处于打开状态,它将保持打开状态。
Fill
的行为方式也相同
参考 MSDN
Fill 方法隐式打开数据适配器的连接 如果发现连接尚未打开,则正在使用。如果填写 打开连接,当 Fill 时也会关闭连接 完成。这可以简化处理单个代码时的代码 操作,例如填充或更新。
这意味着da.Fill(ds, "Test");
后,您的连接将被方法本身关闭。但是您需要打开它以进行以下更新(并且失败)
从SqlDataAdapter.Fill
方法;
Fill 方法使用 SELECT 从数据源中检索行 由关联的 SelectCommand 属性指定的语句。这 与 SELECT 语句关联的连接对象必须有效, 但它不需要打开。如果在调用 Fill 之前关闭连接,则会打开它以检索数据,然后关闭。如果 连接在调用 Fill 之前处于打开状态,它将保持打开状态。
FillSchema
方法也做同样的事情。