使用由函数引入的关闭sql连接

时间:2012-10-05 03:04:21

标签: c#

  

可能重复:
  in a “using” block is a SqlConnection closed on return or exception?

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
 }

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

是的,按设计。

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

答案 2 :(得分: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 */
});

然后,您可以扩展此方法以使用现有连接或根据您喜欢的语义创建新连接。