2013-06-03 145 views
0

我的問題是,有可能捕獲無法打開數據庫錯誤嗎? 當我在我的連接字符串給一個錯誤的數據庫名字,我得到這個錯誤在瀏覽器上 Cannot open database "XYZ" requested by the loginCatch'無法打開數據庫'數據庫和切換數據庫的異常

我有兩個連接字符串中web.config,如果一個數據庫不能訪問,我想切換到其他數據庫。我試過

SqlConnection conn = null; 
try 
    { 
     conn = new SqlConnection(ConfigurationManager.ConnectionStrings["PrimaryDatabase"].ConnectionString); 
    } 
    catch 
    { 
     conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BackupDatabase"].ConnectionString); 
    } 

但是服務器在點擊這個部分之前會拋出一個錯誤。我應該在哪裏捕捉到這個錯誤?

或者我做錯了,應該做一些完全不同的事情?

+0

你什麼時候調用連接的Open方法? – Justin

回答

0

我不一定會推薦嵌套try catch塊,但是由於conn.Open()會拋出異常,因此您需要將第二次嘗試連接到try catch塊中的數據庫。

SqlConnection conn = null; 
try 
{ 
    conn = new SqlConnection(ConfigurationManager.ConnectionStrings["PrimaryDatabase"].ConnectionString); 
    conn.Open(); 
    // do stuff 
    conn.Close(); 
} 
catch (SqlException ex) 
{ 
    try 
    { 
     conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BackupDatabase"].ConnectionString); 
     conn.Open(); 
     // do stuff 
     conn.Close(); 
    } 
    catch 
    { 
     // log or handle error 
    } 
} 
+0

我有一個conn =新SqlConnection(ConfigurationManager.ConnectionStrings [「PrimaryDatabase」] .ConnectionStrings [「PrimaryDatabase」]。ConnectionString);'行斷點,但我得到錯誤之前,斷點被擊中,我'conn.open()低於這個(顯然)。既然大家都認爲它應該打到,我一定是做錯了。將檢查並跟進 – user1

4

您在此處的代碼實際上並未打開連接。要做到這一點,您需要使用conn.Open(),這不在這裏...這意味着它不在try區塊內,因此永遠不會被抓到。

請確保您的conn.Open()聲明實際上在try塊內,並且您應該沒問題。

+0

我在'conn = new SqlConnection(ConfigurationManager.ConnectionStrings [「PrimaryDatabase」]。Connecti onString)''有一個斷點,但是在斷點被打中之前我得到錯誤,而我的conn.open()低於這個)。既然大家都認爲它應該打到,我一定是做錯了。將檢查並跟進 – user1