0

可能重复:
在“使用”块中,SqlConnection 是否在返回或异常时关闭?

这会using关闭_connection吗?

using(SqlConnection _connection = Class1.GetSqlConnection())  
{   //code inside the connection
}

//connection should be closed/ended?

我只是想知道,因为GetSqlConnection()它是一个静态函数,Class1并且整个连接可能不会关闭,因为它正在调用外部类的静态函数而不是直接调用?

 using(SqlConnection _connection = new SqlConnection(_connectionString)
 {   //code inside the connection
 }
4

3 回答 3

1

using语句不关心变量如何获取其值——无论是来自静态函数、成员函数、new运算符还是任何其他方式。一旦using到达的右括号,Dispose()就会调用变量上的方法,如果它是一个IDbConnection实例,则关闭连接,或者IDisposable在处理时执行其他任何操作。

于 2012-10-05T03:07:57.883 回答
0

是的,它确实。

这是实现该GetSqlFunction方法的另一种方法,以便您具有更明确的行为:

public class Class1
{
    private static SqlConnection GetSqlConnection() { /* unchanged */ }

    public static void UseSqlConnection(Action<SqlConnection> action)
    {
        using (var connection = Class1.GetSqlConnection())
        {
            action(connection);
        }
    }
}

然后你这样称呼它:

Class1.UseSqlConnection(c =>
{
    /* use connection here */
});

然后,您可以扩展此方法以使用现有连接或创建新连接,具体取决于您喜欢的语义。

于 2012-10-05T03:13:20.767 回答
0

是的,设计使然。

using块结束时,块用于处理一次性物品的处置。对Dispose()一个对象意味着释放该对象的所有资源。对于诸如 的对象SqlConnection,这将关闭它们的连接。

于 2012-10-05T03:08:31.490 回答