2

我正在使用 sql server,有时我的数据库因维护而停机。我有错误处理代码,因此用户看不到错误页面,而是看到了一个漂亮友好的错误消息。我的问题是:当数据库关闭时,页面加载并显示错误消息需要很长时间。我认为它与 timeout 属性有关,但使用

command.CommandTimeout = 5;

或者

Connect Timeout=5;在 web.config 中connectionString似乎没有帮助,页面加载仍然需要很长时间(大约 40 秒)。有没有办法减少这个时间?

被抛出并记录的异常是

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP Provider,错误:0 - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。)

4

2 回答 2

0

那好吧。

我将为您的所有“数据访问层”类创建一个基类。

public class DataBaseLayer ()
{

public DataBaseLayer()
{ /* check for appSetting here and throw a SqlServerMaintenanceModeException exception (custom exception) */}

}


public class EmployeeDataLayer :  DataBaseLayer ()
    {
public EmployeeDataLayer() : base ()
}

在构造函数中,我会检查 appSetting...是否为“true”或“false”.........然后抛出 CustomException

public class SqlServerMaintenanceModeException : ApplicationException

{}

把它扔到DataBaseLayer的构造函数中......然后让其他一切处理它。

这样......只有“数据库驱动”页面受到影响。

我不喜欢检查“超时”的小原因是..

  1. 这有点不可预测。
  2. 有时这是一个正常的例外......就像你的网络上的一个开关通过了。你将如何区分?

我非常不喜欢模棱两可的例外。

于 2013-07-09T15:05:57.247 回答
0

如果您的服务器连接超时时间过长,请检查:

  • 连接字符串的类型(.NET 提供程序、OLEDB 或其他),它们可能对同一事物有不同的名称
  • 如果您确实使用有问题的连接字符串;您实际上可能使用的是完全不同的连接字符串
  • 隔离您的 try/catch 超时块以仅包装 conn.Open() - 这样您就真的知道打开连接需要太长时间;我并不是说你的例外不是指示性的,只是我不是 100% 确定所有这些时间都只用于 conn.Open()
于 2013-07-09T20:01:08.977 回答