using SqlConnection.Open inside using () {} block?

本文关键字:using block SqlConnection Open inside | 更新日期: 2023-09-27 18:30:37

我需要在里面使用SqlConnection.Open()吗:

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

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

using SqlConnection.Open inside using () {} block?

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

如果您没有显式Close()连接,则using块的末尾将在 using 释放连接时为您执行此操作。当连接被释放时,它会自动关闭。

using语句只是语法糖,它确保无论如何都会在IDisposable实例上调用Dispose,因此在您的情况下,using (SqlConnection connection = new SqlConnection())大致等同于(根据 MSDN):

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

SqlConnection DisposeClose调用的情况下实际上是等效的,因此对Close的调用在using (SqlConnection)块中是多余的。

另一方面,在许多情况下,调用Open仍然是必要的(例如,在调用ExecuteReaderExecuteScalarExecuteNonQuery之前)。using 语句对是否需要显式打开连接没有影响 - 仅对是否需要显式关闭连接没有影响。

提供方便的语法,确保正确使用 可识别的对象

using 在内部实现 IDisposable

using(SqlConnection con=new SqlConnection("myCOnstr")) 
{
con.open();
using(SqlCommand con=new SqlCommand("myCmd",con)) 
{
//......Insert/Update /Delete
}

}