Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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# ADO.NET:检查数据库服务器是否可访问的更快方法?_C#_Database_Ado.net_Connection - Fatal编程技术网

C# ADO.NET:检查数据库服务器是否可访问的更快方法?

C# ADO.NET:检查数据库服务器是否可访问的更快方法?,c#,database,ado.net,connection,C#,Database,Ado.net,Connection,目前,我正在使用此代码检查数据库是否可访问: public bool IsDatabaseOnline(string con) { bool isConnected = false; SQLConnection connect = null; try { connect = new SQLConnection(con); connect.Open(); isConnected = true; } catch (E

目前,我正在使用此代码检查数据库是否可访问:

public bool IsDatabaseOnline(string con)
{
    bool isConnected = false;
    SQLConnection connect = null;

    try {
        connect = new SQLConnection(con);
        connect.Open();
        isConnected = true;

    } catch (Exception e) {
        isConnected = false;

    } finally {
        if (connect != null)
            connect.Close();
    }

    return isConnected;
}
虽然这段代码工作正常,但也有一个缺点。如果服务器不在线,则在确定连接不可用之前,会花费大约4秒钟的时间尝试打开连接

有没有一种方法可以在不尝试实际打开连接并等待超时的情况下测试连接?类似于ping的数据库等价物?

是和否

您可以随时注意服务器侦听的端口,然后尝试使用套接字直接连接到该端口。如果你成功了,你可以“假设”它是在线的,但这可能并不取决于你的网络环境。不过,这是最像“ping”的方法。当然,可能有其他东西在听,但在DB暂时关闭的标准环境中,这可能不太可能

此外,如果您的数据库位于专用计算机上,您实际上可以ping它。但这只会检查机器是否启动,而不会检查DB服务器


最后一个选项是让一些后台服务器不断监视DB服务器,当它检测到它处于脱机状态时,它会适当地标记一些内容。然后,你的应用程序会检查这个东西(实际上是一个缓存),它实际上是即时的。当然,这意味着它可能会给出误报(即服务器可能在线,但监控服务尚未更新缓存)。

您可以将连接超时更改为更短。做一些测试,看看你能走多低,仍然是可靠的。我打赌你能跑近500米

我的方法(成功连接后)是选择一个不依赖于表格的选项,例如时间。 在MS SQL Server中:


“选择Sysdatetime()”

您希望您的服务器长时间停机吗?您应该将其更改为
catch(SqlException)
如果
ConnectionTimeout
以秒为单位,您希望如何指定500毫秒?