2012-12-04 57 views
0

如何在尝试连接到可能关闭的数据库时错误地处理错误,或者在MVC 4中给出错误的连接字符串?如何正常处理ASP.NET MVC 4中的数据库连接?

我有我的Web.config文件中的字符串,它的方式访问数据库只是我的实例从的DbContext派生类中的每个控制器,就像这样:

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

这工作正常,如果数据库起来,一切是正确的,但如果它不是,我的网站显示在页面上此错误:

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

很显然,我不希望这出现,想什么,我到d o有一种方法来try catch错误并显示一个自定义错误页面(类似于404页面未找到)。

谢谢。

回答

1

通过添加一个“Error.cshtml”视图执行初始化的功能

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 
} 

} 
1

这要看private DBEntities db = new DBEntities("database");是,当它被调用,但为什么不干脆:

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

是的,这似乎不错,但我的每控制器一条线,所以我认为这是最好的地方,代码的函数的地方,并在需要时创建实例。 – swiftcode

+0

啊,绝对看看注入一个接口到你的控制器,而不是在控制器本身实例化你的DBEntities。我使用Ninject,但有很多更多选择... –

1

启动共享视图文件夹。给它的 System.Web.Mvc.HandleErrorInfo

模型类型然后添加以下到你的web.config文件

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

这将重定向到任何异常的错误观点。

现在这只是一个造型错误页面的问题。

我建议你按照其他文章中建议的方式尝试在你的catch块中重新抛出一个用户友好的消息,比如“无法建立数据库连接”。

相当充分的讨论/解释一下:http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc