2013-06-03 42 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