在 using () {} 块中使用 SqlConnection.Open()?

5

Do I need to use SqlConnection.Open() inside:

using (SqlConnection var = new SqlConnection()) 
{
   //my operations
}

如果我不通过 SqlConnection.Close() 函数来释放连接,会发生什么?

如果您没有显式调用close/dispose方法或使用using块隐式关闭或释放连接,那么该连接将不会在垃圾回收启动之前返回到池中。 - Dan Guzman
3个回答

14

是的,您需要在using块内打开连接。

如果您没有明确调用Close()关闭连接,则当using块结束时会自动关闭连接。因为using会释放连接,而释放连接会自动关闭连接。


5
using语句只是一种语法糖,它确保IDisposable实例上调用Dispose方法,所以在你的情况下,using (SqlConnection connection = new SqlConnection())与(根据MSDN)大致等同于:
SqlConnection connection = new SqlConnection();

try
{
    // Operations.
}
finally
{
    if (connection != null)
    {
        connection.Dispose();
    }
}

SqlConnection的情况下,DisposeClose调用实际上是等效的,因此在using (SqlConnection)块内调用Close将是多余的。
另一方面,在许多场景中仍然需要调用Open(例如在调用ExecuteReaderExecuteScalarExecuteNonQuery之前)。using语句对于是否需要显式打开连接没有影响 - 只有对于是否需要显式关闭它。

0
提供了一种方便的语法,确保正确使用 IDisposable 对象。 using 在内部实现了 IDisposable。
using(SqlConnection con=new SqlConnection("myCOnstr")) 
{
con.open();
using(SqlCommand con=new SqlCommand("myCmd",con)) 
{
//......Insert/Update /Delete

}


}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接