Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕捉';无法打开数据库';数据库和交换机数据库的异常_C#_Asp.net_Sql Server - Fatal编程技术网

C# 捕捉';无法打开数据库';数据库和交换机数据库的异常

C# 捕捉';无法打开数据库';数据库和交换机数据库的异常,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我的问题是,是否有可能捕获无法打开数据库的错误? 当我在连接字符串中给出错误的数据库名称时,我在浏览器上会遇到此错误 无法打开登录请求的数据库“XYZ” 我在web.config中有两个连接字符串,如果一个数据库不可访问,我想切换到另一个数据库。我试过了 SqlConnection conn = null; try { conn = new SqlConnection(ConfigurationManager.ConnectionStrings["PrimaryDatab

我的问题是,是否有可能捕获无法打开数据库的错误? 当我在连接字符串中给出错误的数据库名称时,我在浏览器上会遇到此错误
无法打开登录请求的数据库“XYZ”

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

SqlConnection conn = null;
try
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["PrimaryDatabase"].ConnectionString);
    }
    catch 
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BackupDatabase"].ConnectionString);
    }
但服务器在命中此部件之前抛出错误。我应该在哪里捕获此错误


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

这里的代码实际上没有打开连接。为此,您需要使用
conn.Open()。。。这意味着它在
try
块之外,因此永远不会被抓到


确保您的
conn.Open()
语句实际位于
try
块内,您应该可以。

此处的代码实际上没有打开连接。为此,您需要使用
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
    }
}

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

何时调用连接的
Open
方法?何时调用连接的
Open
方法?我在
conn=new-SqlConnection(ConfigurationManager.ConnectionStrings[“PrimaryDatabase”].ConnectionString)上有一个断点行,但在到达断点之前,我得到了一个错误,并且我的
conn.open()
明显低于此值。既然大家都认为它应该击中它,我一定是做错了什么。将检查并跟踪我在
conn=new SqlConnection(ConfigurationManager.ConnectionStrings[“PrimaryDatabase”].ConnectionString)上有一个断点行,但在到达断点之前,我得到了一个错误,并且我的
conn.open()
明显低于此值。既然大家都认为它应该击中它,我一定是做错了什么。将检查并跟进我在
conn=new SqlConnection(ConfigurationManager.ConnectionStrings[“PrimaryDatabase”].Connecti上有一个断点‌​onString)行,但我在到达断点之前出错,我的conn.open()显然低于此值。既然大家都认为它应该击中它,我一定是做错了什么。将检查并跟进我在
conn=new SqlConnection(ConfigurationManager.ConnectionStrings[“PrimaryDatabase”].Connecti上有一个断点‌​onString)行,但我在到达断点之前出错,我的conn.open()显然低于此值。既然大家都认为它应该击中它,我一定是做错了什么。我们会检查并跟进