2012-12-04 82 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