代码之家  ›  专栏  ›  技术社区  ›  Stefan

在webservice中处理sql连接的最佳方法?

  •  1
  • Stefan  · 技术社区  · 16 年前

    所有这些函数都针对MSSQLS2005或MSSQLS2000数据库工作。一天中的某些时段,来自客户端的流量非常大,似乎sql server上的连接耗尽,导致所有客户端停止。

    在每一个函数中,我打开一个连接,做一些事情,然后关闭连接,有时有事务,有时没有事务。

    有没有其他方法可以处理我应该使用的连接,比如每个Web服务全局处理一个连接或者其他任何方法?

    问题2:

    Strange SQL2005 problem. "SqlConnection does not support parallel transactions"

    我现在把它缩小到“断开连接”错误。

    3 回复  |  直到 8 年前
        1
  •  4
  •   casperOne    16 年前

    您肯定应该在每个函数中使用一个连接,而且听起来您没有正确地处理它们。假设数据库操作包含在您调用的函数中,那么您的代码应该如下所示:

    using (SqlConnection connection = <connection code>)
    {
      using (SqlCommand command = <command code>)
      {
        // Execute.
      }
    }
    

    在服务器端,连接将保持打开状态。默认情况下,SqlConnection类启用连接池,因此您将看到连接在服务器端打开。

        2
  •  3
  •   cjk    16 年前

    连接池意味着.Net将为您保留一些打开的连接,以便在您下次需要连接时减少开销。CLR可以为您提供一个已经打开(并已清理)的连接,这比直接重新连接到数据库要快几百倍。调用connection.Close()时,您只是将连接返回到池中进行回收。

    您看到的问题是因为您正在达到100个连接—池中的默认最大连接数(默认最小连接数为0)。此时,池将无法提供另一个连接,直到一个连接被回收,因此应用程序将挂起或超时。您需要更改您的连接字符串以包含更高的最大数量(同时还要考虑减少连接)。

        3
  •  0
  •   duffymo    16 年前