【问题标题】:How to Display an Error Page when the SQL Server is Down?SQL Server 宕机时如何显示错误页面?
【发布时间】:2013-12-18 18:01:25
【问题描述】:

我的公司有一个多年前在 ASP.NET 中创建的旧网页。我从来没有使用过 ASP.NET,我真的很困惑当数据库关闭时如何显示错误。该网站使用 HMTL 和 asp 从文本框中获取信息并将其存储在数据库中。连接信息位于 web.config 文件中。如果数据库没有响应,我将如何不显示某个 asp 页面,而是显示错误消息?

谁能指引我正确的道路?

我使用过一点 PHP、JavaScript、Jquery、MySQL。然而,这对我来说是全新的。

此外,这是我在改造网页时的临时修复,但我们必须显示一些内容,以便客户知道它无法正常运行。所以我承受着很大的压力来修复它,我一无所知。

【问题讨论】:

  • 您使用的是 Classic ASP 还是 ASP.net。如果您的 conn 字符串在 web.config 中,我猜它是 .net
  • 是的,可能是 .NET...我怎么知道它是哪一个?
  • 你的文件扩展名是什么。 .asp 代表经典,.aspx 代表 .net
  • 我不是 .net 方面的专家,而不是经典方面的专家,但您通常会看到一个 .net 错误页面(通常称为 YSOD 或黄屏死机),它会告诉您它无法连接。猜测你的代码中可能有一些东西会在发生错误时触发响应重定向。您可能需要先发布一些代码,然后才能有人给您更多建议。
  • 如果数据库宕机了会怎样?

标签: html asp.net sql-server


【解决方案1】:

在您的母版页中(如果有,否则在每个单独的页面中)Page_Load 方法,添加...

if(!DatabaseConnectivity.IsDatabaseUp())
{
   Response.Redirect("~/DatabaseDown.aspx");
}

将 DatabaseConnectivity.cs 类添加到您的 App_Code 文件夹。向此类添加一个名为 IsDatabaseUp() 的函数。在该函数中,对您的数据库进行简单查询。如果遇到异常,您可以假设数据库已关闭并返回 false。

public class DatabaseConnectivity
{
   public static bool IsDatabaseUp()
   {
      try
      {
         SqlDataSource ds=new SqlDataSource();
         ds.ConnectionString=System.Web.Configuration.WebConfigurationManager.ConnectionStrings["MYCONNSTRINGNAME"].ToString();
         ds.SelectCommand="select count(*) from sys.Tables";
         ds.Select(DataSourceSelectArguments.Empty);
         return true;
      }
      catch(Exception)
       {
          return false;
       }
   }
}

将 DatabaseDown.aspx 文件添加到站点的根目录,并通知站点已关闭。

【讨论】:

  • 这看起来不错,谢谢!您会为查询建议一个简单的选择语句吗?另外,如果连接信息在 web.config 文件中,我该如何连接?比如,语法的例子是什么?
  • 我不会假设知道您使用的是什么数据库,所以我无法告诉您执行此操作的代码。但我建议您查看应用程序的其余部分,看看它是如何处理数据库交互的,这应该让您对如何获取连接信息有一个很好的了解。如果是 Oracle 数据库,我会使用 select 1 from dual 之类的东西,但如果是 SQL Server,我会使用 select * from sys.Tables 之类的东西(但我不是普通的 SQL Server 用户,所以我可能会有更强大的东西不知道)
  • @jlaverde 我在问题标题中看到您正在使用 SQL Server,因此我更新了代码,向您展示了如何执行查询。请记住,我是少数定期从代码后面使用 SqlDataSource 的人之一。
  • -1:为什么使用SqlDataSource 而不仅仅是SqlConnectionSqlCommand?此外,您应该只捕获SqlException 等。如果抛出“世界即将结束异常”,则返回 false 还不够好。
  • @JohnSaunders 因为我喜欢 SqlDataSource,所以它的代码更简洁。该代码应该发生的唯一例外是与数据库通信时出现问题。在任何情况下,代码都是一个示范性的例子,说明你可以用什么方式来实现他想要的。这只是为了让他开始,这不一定是他必须投入生产的东西。如果您认为我的解决方案不足以让他开始,请随时撰写您自己的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2018-05-14
  • 2016-03-22
  • 2018-08-05
相关资源
最近更新 更多