如果我不打开SqlConnection的实例会怎么样?

时间:2013-09-09 12:44:25

标签: c# sql-server

我正在审查应用程序中的一段代码,并且在连接数据库时出现了一些非常奇怪的事情。

它正在执行查询而不打开这样的连接:

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);
}

由于连接未打开,它不能失败吗?我实际上在单独的项目中对此进行了测试,但它确实有效。

4 个答案:

答案 0 :(得分:8)

如果连接已关闭,则使用SqlDataAdapter.Fill将打开连接 http://msdn.microsoft.com/en-us/library/377a8x4t.aspx

答案 1 :(得分:3)

Per the documentation,SqlDataAdapter将打开conenction(如果尚未打开),并将其恢复到之前的状态。

  

与SelectCommand关联的连接对象必须有效,但不需要打开。如果在调用FillSchema之前关闭连接,则会打开它以检索数据,然后关闭。如果在调用FillSchema之前连接已打开,则它将保持打开状态。

Fill的行为方式也相同

答案 2 :(得分:3)

参考MSDN

  

Fill方法隐式打开DataAdapter的Connection   如果发现连接尚未打开,则使用。如果填写   打开连接,它也将在Fill时关闭连接   完了。这可以在处理单个代码时简化代码   填充或更新等操作。

这意味着在da.Fill(ds, "Test");之后,您的连接被方法本身关闭。但是你需要打开以进行以下更新(并且失败)

答案 3 :(得分:1)

来自SqlDataAdapter.Fill方法;

  

Fill方法使用SELECT从数据源中检索行   由关联的SelectCommand属性指定的语句。该   与SELECT语句关联的连接对象必须有效,   但不需要打开。如果在调用Fill之前关闭连接,则会打开它以检索数据,然后关闭。如果   在调用Fill之前连接已打开,它仍保持打开状态。

同样FillSchema方法做同样的事情。