c# - 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”之外,我们是否需要关闭所有其他情况的连接?如果我们这样做,此代码是否有任何后续影响?
解决方案
调整
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 方法。
让我知道它是否有效。
推荐阅读
- c - 使用嵌套 if 查找四个数字中最大的程序
- r - 我的数据框似乎有列名,但是当我尝试使用 lm() 函数并命名列时,r 说“找不到对象”
- c++ - 在 C++ 中修改“常量字符指针”
- python - python中的外推(炸弹热量计中的温度曲线)
- ruby-on-rails - 在 Rails 4 和 Rails 6 中工作的回形针替代品
- hybris - 如何确定 Hybris 扩展无法加载的原因
- function - SwiftUI如何在视图中使用带有函数的类
- multithreading - 多核/处理器上的多线程
- c++ - fork(),C 中的共享内存和指针
- regex - 仅提取不包含以特定字母组合结尾的单词的单词(仅使用正则表达式)