ado.net使用“using”语句时关闭连接

时间:2010-12-08 16:00:41

标签: c# tsql ado.net

我正在像SQL这样对SQL Server执行数据库访问方法

  using (SqlConnection con = new SqlConnection(//connection string)
  {
    using (SqlCommand cmd = new SqlCommand(storedProcname, con))
     {
       try{
           con.open();
           //data reader code
       }
       catch
       {

       }
     }
  }

我是否需要关闭或处理SqlCommand,或者using语句是否会为我处理?我只是不想挂开连接 感谢

7 个答案:

答案 0 :(得分:57)

using将为您处理。在幕后,SqlConnection.Dispose()调用SqlConnection.Close()方法,SqlCommand.Dispose()调用SqlCommand.Close()

作为附加背景,using语句是try ... finally的语法糖,用于在IDisposable中处置finally对象。

答案 1 :(得分:12)

顺便说一句,您可以使代码更简洁,更易读,如下所示:

 using (SqlConnection con = new SqlConnection(/*connection string*/))
 using (SqlCommand cmd = new SqlCommand(storedProcname, con))
 {
    //...
 }

答案 2 :(得分:4)

正如菲尔所说,使用条款将为您处理。在编译时,它将连接创建包装在try .. finally中并将连接处理调用放在finally中。

有关详细信息,请参阅using statement article at msdn

答案 3 :(得分:3)

是的,您的代码将关闭连接,但这通常意味着释放回连接池以便以后真正关闭。

如果您执行此代码片段,然后执行sp_who并观察您的连接仍然存在,那就是原因。

如果你绝对需要真正关闭连接(边缘情况要确定),那么使用ClearAllPools sqlConnection的静态方法

答案 4 :(得分:2)

Using关键字会自动关闭您的连接 所以你不必担心每次都在调用connection.close()

答案 5 :(得分:1)

当范围

using (SqlConnection con = new SqlConnection(//connection string) 
{
}

将结束,连接将由运行时自动处理。所以不要担心

答案 6 :(得分:0)

我认为SqlCommand不需要“使用”。对于SqlConnection,“使用”本身就可以完成这项工作。 实际上,您的连接已提交到连接池。