【发布时间】:2016-01-18 07:33:15
【问题描述】:
连接到 SQL-Server 时,我的程序执行在 .Open() 方法上挂起的时间超过了指定的 2 秒超时。
当数据库所在的机器脱机或重新启动时,我设法重现了该问题。当该数据库所在的计算机启动时,程序的执行将取消挂起。
如何在超过 2 秒超时时强制抛出异常或其他任何东西?
我试过 OleDB 和 SqlConnection 提供程序,没有区别。
我可以在连接之前 ping 机器,但仍然存在 ping 成功的情况(比如机器关闭前 1 秒),然后打开连接挂起...
下面提供的示例代码。
public static IDbConnection GetConnection(IDbConnection connection)
{
connection.ConnectionString = "connectionString; Connection Timeout=2;";
connection.Open();
return connection;
}
【问题讨论】:
-
Connection Timeout 属性只是创建连接的时间,之后的一切(连接建立后还有很多事情要做)不count可能需要无限期(除非我不知道有 另一个 超时)。您可以做的是使用 watchdog 在单独的线程中执行您自己的代码,以将总执行时间限制为 2 秒(请注意,对于 TCP 连接,2 秒是非常短的时间)。
标签: c# .net sql-server