Catch '不能打开数据库'数据库和交换机数据库例外

本文关键字:数据库 交换机 不能 Catch | 更新日期: 2023-09-27 18:16:42

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

但是服务器在到达此部分之前抛出错误。我应该在哪里捕获这个错误?

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

Catch '不能打开数据库'数据库和交换机数据库例外

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

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

我不一定建议嵌套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
    }
}