为数据库和交换机数据库捕获“无法打开数据库”异常

时间:2013-06-03 20:49:04

标签: c# asp.net sql-server

我的问题是,是否有可能捕获无法打开数据库错误? 当我在我的连接字符串中给出错误的数据库名称时,我在浏览器上收到此错误 Cannot open database "XYZ" requested by the login

我在web.config中有两个连接字符串,如果一个数据库不可访问,我想切换到另一个数据库。我试过了

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

但服务器在点击此部分之前会抛出错误。我应该在哪里捕获此错误?

或者我做错了,应该做些完全不同的事情吗?

2 个答案:

答案 0 :(得分:4)

此处的代码实际上并未打开连接。要做到这一点,你需要使用conn.Open(),这不在这里......这意味着它在try块之外,因此永远不会被抓住。

确保您的conn.Open()语句实际上在try块内,您应该没问题。

答案 1 :(得分: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
    }
}