启动和关闭SQL连接 - 在开始和结束时还是每次需要时?

时间:2011-04-06 18:45:36

标签: c# asp.net sql

我正在使用ASP.Net在C#中创建一个Web应用程序,我正在使用SQL数据库。在我看到的指南(关于SqlConnection和SqlCommand)中,每次他们想要发送查询时,他们都会打开并关闭SQL连接。但我不确定这是处理连接的最佳方式,因为我也学过一些PHP,据我所知,在PHP中你只在开始时打开一次连接。那么处理连接的最佳方法是什么?

6 个答案:

答案 0 :(得分:3)

对于Web请求的长度,您通常应该有一个连接和事务。

如果您有两个连接,则可能会有不一致的数据。例如在第一个查询中,您检查银行余额,然后关闭它。然后,您将5美元添加到余额中,并将其保存在下一个连接中。如果其他人在这两个连接之间增加了5美元怎么办?它会失踪。

最简单的方法是打开连接global.asax BeginRequest并将其保存到HttpContext中。无论何时需要连接,请从那里拉出来。请确保。关闭EndRequest中的连接

另外,请在此处阅读连接池:http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx 如果用户名每次都相同,重复打开和关闭连接并不“昂贵”。

答案 1 :(得分:1)

Ado.Net已经为您管理了连接池,因此您无需担心重用连接。

您可以使用Using statement关闭并处置连接:

   DataTable dt = new DataTable();
   using (SqlConnection conn = new SqlConnection("my_connection_string"))
   {
      using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * from Table", conn))
      {
        conn.open();
        adapter.Fill(dt);    
      }
   }

答案 2 :(得分:0)

.NET中的常规做法是打开SqlConnection并使用SqlCommand,然后处理它们。

using(SqlConnection connection = new SqlConnection("myConnectionString"))
{
    using(SqlCommand command = new SqlCommand("dbo.SomeProc"))
    {
        // Execute the command, when the code leaves the using block, each is disposed
    }
}

答案 3 :(得分:0)

由于与数据库的连接是一种昂贵的资源,因此最好尽可能晚地打开sql连接并尽早关闭。因此,您应该在执行命令之前打开连接,并在执行命令后将其关闭。

另一方面,如果要在很短的时间间隔内执行许多命令,最好先打开一次连接,然后在执行完所有命令后关闭。

答案 4 :(得分:0)

对于初学者而言,他们没有,因为正在使用连接池,但SqlCommand有一个重载来获取连接对象,所以你可以保持连接并传递它。

一般而言:

使用(var ts = new TransactionScope()) {   使用(var connection = new SqlConnection(...))   {     using(var command = new SqlCommand(connection,...)     {       ...     }

using (var command = new SqlCommand(connection, ...)
{
   ...
}

}

ts.Complete(); }

当然我建议此时使用LINQ-to-SQL或EF。

答案 5 :(得分:0)

如果您不想担心打开和关闭连接,请尝试Enterprise Library中的数据访问应用程序阻止。