可能重复:
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
}
答案 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 */
});
然后,您可以扩展此方法以使用现有连接或根据您喜欢的语义创建新连接。