如果我不打开 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);
}

它不应该因为连接未打开而失败吗?我实际上在单独的项目中对此进行了测试,并且它起作用了。

如果我不打开 SqlConnection 的实例会发生什么

如果连接已关闭,使用 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方法也做同样的事情。