我的问题是,是否有可能捕获无法打开数据库错误?
当我在我的连接字符串中给出错误的数据库名称时,我在浏览器上收到此错误
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);
}
但服务器在点击此部分之前会抛出错误。我应该在哪里捕获此错误?
或者我做错了,应该做些完全不同的事情吗?
答案 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
}
}