Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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# 如何在打开SqlConnection时捕获异常?_C#_Sql Server_Exception Handling - Fatal编程技术网

C# 如何在打开SqlConnection时捕获异常?

C# 如何在打开SqlConnection时捕获异常?,c#,sql-server,exception-handling,C#,Sql Server,Exception Handling,要在应用程序启动期间检查SQL Server实例是否存在/正在运行,我想建立到所需实例的连接 我是这样做的: SqlConnection conn = null; conn = new SqlConnection("Data Source=AES0020\\ESQLSRV;Initial Catalog=MaterialData;Integrated Security=true;"); try { conn.Open(); } catch (SqlException ex) {

要在应用程序启动期间检查SQL Server实例是否存在/正在运行,我想建立到所需实例的连接

我是这样做的:

SqlConnection conn = null;
conn = new SqlConnection("Data Source=AES0020\\ESQLSRV;Initial Catalog=MaterialData;Integrated Security=true;");
try
{
    conn.Open();
}
    catch (SqlException ex)
{
    MessageBox.Show("Sql exception");
}
    catch (Exception ex)
{
    MessageBox.Show("Exception");
}
所以我的理解是,如果不可能建立连接,我的try-catch块应该捕获一个异常。 但事实并非如此。运行应用程序时,我总是在

conn.Open();
“System.Data.SqlClient.SqlException”类型的第一次意外异常 发生在System.Data.dll中

其他信息:与网络相关或特定于实例的错误 建立与SQL Server的连接时发生。服务器已关闭 找不到或无法访问。验证实例名称是否正确 正确,并且SQL Server已配置为允许远程连接。 (提供程序:共享内存提供程序,错误:40-无法打开 与SQL Server的连接)

但它从来没有击中捕捉块

为什么会发生这种情况

一般来说,有没有更好的方法来测试同一台机器上的SQL Server是否正在运行

是的,我也查过这个帖子。这并不能解决我的问题

编辑: 对于那些不相信例外不会被发现的人:

first chance exception(第一次机会异常)是在您的try/catch块中捕获异常之前的异常指示。这只是一个调试功能-请参见@C.Evenhuis:Yes,但是如果我忽略它或在异常设置中停用它,这对我没有帮助。因为异常仍然不会被捕获,因此我无法检查服务器是否正在运行,这是我的目标。一般来说,在启动过程中检查服务器是否存在没有意义,因为这样的检查无法保证服务器在检查完成后一纳秒仍会运行,在你试图把它用于任何真正的目的之前。您需要编写代码来处理在任何时间点都不可用的情况,因为它独立于您的代码。@ck84vi第一次机会的异常不在catch块中,将在较低级别的catch块中处理(老实说,我不相信异常不会出现在
catch
块中的说法,抱歉)将
conn=new-SqlConnection(“数据源=AES0020\\ESQLSRV;初始目录=MaterialData;集成安全=true;”;
放入try块“第一次机会异常”是在您的try/catch块中捕获异常之前的异常指示。这只是一个调试功能-请参阅@C.Evenhuis:Yes,但如果我在异常设置中忽略它或停用它,这将无助于我。因为异常仍然不会被捕获,因此我无法检查服务器是否正在运行,这是错误的这是我的目标。一般来说,在启动过程中检查服务器是否存在没有意义,因为这样的检查不能保证服务器在检查完成后,以及在您尝试将其用于任何实际用途之前,即使是毫微秒也会运行。您需要编写代码来处理在任何poi都不可用的情况nt,因为它独立于您的代码。@ck84vi未在catch块中结束的第一次机会异常将在较低级别的catch块中处理(老实说,我不相信异常未在
catch
块中结束的说法,抱歉)put
conn=new SqlConnection(“数据源=AES0020\\ESQLSRV;初始目录=MaterialData;集成安全性=true;”;
在try块中