首页 > 解决方案 > SQL 连接超时问题

问题描述

我有一个 Web 应用程序,其中包含连接 sql server 的类。我写了如下的连接类

public SqlConnection DbConnectSql()
{
    string str = System.Configuration.ConfigurationManager.ConnectionStrings["conStr"].ToString();
    _con = new SqlConnection(str);
    if (_con.State == ConnectionState.Open)
        _con.Close();
    _con.Open();
   return _con;
}

当我在生产服务器上使用上述代码时,有时连接没有打开。重新启动 IIS 后连接工作正常。我必须每两天重新启动一次 IIS。工作 sql 连接。我们没有得到这个问题的确切例外。

为了解决这个问题,除了“<code>_con.State == ConnectionState.Closed”之外,我们是否需要关闭所有其他情况的连接?如果我们这样做,此代码是否有任何后续影响?

标签: c#asp.netsql-serveriis

解决方案


调整

 if (_con.State == ConnectionState.Open)
            _con.Close();
        _con.Open();

 if (_con.State == ConnectionState.Closed)
                _con.Open();

并尝试。

通常,在启动连接时检查连接是否打开然后立即关闭并立即重新打开它不是一个好习惯,因为可能存在延迟问题。

检查该会话是否打开了任何连接(connection == Connection.Closed)然后,如果它已关闭,则打开它,否则什么都不做,因为我已经连接了。

这样,除了在逻辑上更有意义之外,也更简洁。

此外,在您的代码中,当您使用 SqlConnection 时,将它们包装在

using(_con)
{
    //code here, sql stuff
};

语句,因为它将自行管理所有关闭和处理连接的内容,因此您可以确定当您的 sql 逻辑完成时,所有内容都会正确处理,而无需手动调用 Close 和 Dispose 方法。

让我知道它是否有效。


推荐阅读