【问题标题】:How to handle database connection in ASP.NET MVC 4 gracefully?如何优雅地处理 ASP.NET MVC 4 中的数据库连接?
【发布时间】:2012-12-04 14:11:20
【问题描述】:

在尝试连接到可能已关闭的数据库或在 MVC 4 中给出不正确的连接字符串时,如何优雅地处理错误?

我在 Web.config 中有我的字符串,它访问数据库的方式只是在每个控制器中实例化从 DBContext 派生的类,如下所示:

private DBEntities db = new DBEntities("database");

如果数据库已启动且一切正常,则此方法可以正常工作,但如果不是,我网站上的页面会显示此错误:

Exception Details: System.ComponentModel.Win32Exception: The network path was not found

显然我不希望出现这种情况,我想做的是有办法try catch 错误并显示自定义错误页面(类似于 404 Page Not Found)。

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc database error-handling


    【解决方案1】:

    在函数中进行初始化

    private DBEntities db;
    
    // then in your function attempt to initialise
    try{
    
    db = new DBEntities("database");
    
    db.Connection.Open();
    
    }
    catch(Exception ex){
    
    if(db.Connection != ConnectionState.Closed){
    
    db.Connection.Close();
    db.Dispose();
    
    //go to error page
    }
    
    }
    

    【讨论】:

      【解决方案2】:

      这取决于private DBEntities db = new DBEntities("database"); 在哪里以及何时被调用,但为什么不只是:

      try {
        private DBEntities db = new DBEntities("database");
      } catch (Exception ex) {
        //do something here
      }
      

      【讨论】:

      • 是的,这看起来不错,但我每个控制器都有一行代码,所以我认为最好将该代码放在某个函数中,并在需要时实例化它。
      • 啊,一定要考虑将接口注入您的控制器,而不是在控制器本身中实例化您的 DBEntities。我使用 Ninject,但还有很多很多可供选择...
      【解决方案3】:

      首先在共享视图文件夹中添加一个“Error.cshtml”视图。给它一个模型类型 System.Web.Mvc.HandleErrorInfo

      然后将以下内容添加到您的 web.config 文件中

      <system.web>
        <customErrors mode="On" defaultRedirect="/Error" />
      </system.web>
      

      这将重定向到任何异常的错误视图。

      现在只需设置错误页面的样式即可。

      我建议您按照其他帖子中的建议尝试 { } catch { },在您的 catch 块中,只需重新抛出一条用户友好的消息 - 例如“无法建立数据库连接”。

      这里有一个完整的讨论/解释:http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 2014-03-11
        • 1970-01-01
        相关资源
        最近更新 更多