我有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连接。我们没有得到这个问题的确切例外。
要解决此问题,我们是否需要关闭除“_con.State == ConnectionState.Closed
”之外的所有其他情况的连接?如果我们这样做,对此代码有任何后续影响吗?
答案 0 :(得分:0)
修改
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方法。
让我知道它是否有效。
答案 1 :(得分:0)
我们是否需要关闭所有其他情况的连接
当然,只是因为所有连接都是在一个池中创建的。见https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling
con.Close()
,然后致电con.Dispose()
以确保您获得免费资源