在使用(){}块内部使用SqlConnection.Open?

时间:2014-11-15 10:09:03

标签: c# asp.net sql-server

我是否需要在内部使用SqlConnection.Open()

using (SqlConnection var = new SqlConnection()) 
{
   //my operations
}

如果我不通过SqlConnection.Close()函数处理此连接会怎样?

3 个答案:

答案 0 :(得分:9)

是的,您需要在Open阻止内using建立连接。

如果您没有明确Close()该连接,using块的结尾将为您执行此操作,因为使用处理连接。当处理连接时,它会自动关闭。

答案 1 :(得分:2)

using语句只是语法糖,可确保在Dispose实例上调用IDisposable,无论如何,因此在您的情况下using (SqlConnection connection = new SqlConnection())大致相当于({1}}根据MSDN):

SqlConnection connection = new SqlConnection();

try
{
    // Operations.
}
finally
{
    if (connection != null)
    {
        connection.Dispose();
    }
}

如果SqlConnection DisposeClose调用实际上是等效的,那么在Close块内调用using (SqlConnection)将是多余的。< / p>

另一方面,在许多情况下(例如,在致电OpenExecuteReaderExecuteScalar之前),仍然需要拨打ExecuteNonQueryusing语句对是否需要显式打开连接没有影响 - 仅取决于是否需要显式关闭它。

答案 2 :(得分:0)

  

提供方便的语法,确保正确使用   IDisposable对象

using在内部实施IDisposable

using(SqlConnection con=new SqlConnection("myCOnstr")) 
{
con.open();
using(SqlCommand con=new SqlCommand("myCmd",con)) 
{
//......Insert/Update /Delete

}


}