我使用的是sql server,有时我的数据库会因为维护而停机。我有错误处理代码,所以用户不会看到错误页面,相反,他们会看到一条友好的错误消息。我的问题是:当数据库关闭时,页面加载并显示错误消息需要非常长的时间。我认为这与超时属性有关,但使用更改它
command.CommandTimeout = 5;
或
connectionString
中web.config中的Connect Timeout=5;
似乎没有帮助,并且加载页面仍然需要很长时间(大约40秒)。有没有办法尽量减少这段时间?
抛出并记录的异常是
发生与网络相关或特定于实例的错误建立与SQL Server的连接。找不到服务器或无法访问。验证实例名称是否正确,以及SQL Server已配置为允许远程连接。(提供程序:TCP提供程序,错误: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的构造函数中。。。。。。然后让其他一切来处理。
那样。。。只有"数据库驱动"页面受到影响。
我不喜欢检查"超时"的一个小原因是。。
- 这有点不可预测
- 有时这是一个正常的例外。。。。。。。。。。。。。就像你网络上的一个开关断了一样。你将如何区分
我非常不喜欢模棱两可的例外情况。
如果服务器连接超时时间过长,请检查:
- 连接字符串的类型(.NET提供程序、OLEDB或其他),它们可能对同一事物有不同的名称
- 如果您真的正在使用有问题的连接字符串;您实际上可能使用了完全不同的连接字符串
- 隔离你的try/catch超时块,只包装conn.Open()-这样你就知道打开连接需要太长时间;我并不是说你的异常不是指示性的,只是我不能100%确定所有的时间都只花在了conn.Open()上