C# 使用SqlConnection.openinsideusing(){}块?
是否需要在内部使用C# 使用SqlConnection.openinsideusing(){}块?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,是否需要在内部使用SqlConnection.Open() using (SqlConnection var = new SqlConnection()) { //my operations } ? 如果我不使用SqlConnection.Close()函数处理此连接,会发生什么情况?是的,您需要使用块在中打开连接 如果您没有显式地Close()连接,那么using块的末尾将在using处理连接时为您完成此操作。当一个连接被释放时,它会自动关闭 提供方便的语法,确保正确使用 可识别对象
SqlConnection.Open()
using (SqlConnection var = new SqlConnection())
{
//my operations
}
?
如果我不使用
SqlConnection.Close()
函数处理此连接,会发生什么情况?是的,您需要使用块在中打开连接
如果您没有显式地Close()
连接,那么using
块的末尾将在using处理连接时为您完成此操作。当一个连接被释放时,它会自动关闭
提供方便的语法,确保正确使用
可识别对象
使用
在内部实现IDisposable
using(SqlConnection con=new SqlConnection("myCOnstr"))
{
con.open();
using(SqlCommand con=new SqlCommand("myCmd",con))
{
//......Insert/Update /Delete
}
}
using
语句只是一种语法糖,它确保无论发生什么情况,Dispose
都会在IDisposable
实例上被调用,因此在您的情况下using(SqlConnection connection=new SqlConnection())
大致相当于(根据MSDN):
在SqlConnection
Dispose
和Close
调用实际上是等效的,因此对Close
的调用在使用(SqlConnection)
块中是多余的
另一方面,在许多情况下仍然需要调用Open
(例如,在调用ExecuteReader
、ExecuteScalar
、ExecuteNonQuery
之前)。using
语句对您是否需要显式打开连接没有影响-只对您是否需要显式关闭连接有影响。如果您不通过显式调用close/dispose方法或使用using块隐式关闭或释放连接,在垃圾回收开始之前,连接不会返回到池中。
SqlConnection connection = new SqlConnection();
try
{
// Operations.
}
finally
{
if (connection != null)
{
connection.Dispose();
}
}