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();
    }
}