0

我的问题是,是否有可能捕获无法打开数据库错误?当我在连接字符串中提供错误的数据库名称时,我在浏览器上收到此错误 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);
    }

但是服务器在到达这部分之前会抛出一个错误。我应该在哪里发现这个错误?

还是我做错了,应该做一些完全不同的事情?

4

2 回答 2

4

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

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

于 2013-06-03T20:51:57.370 回答
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
    }
}
于 2013-06-03T20:54:26.323 回答