ADO.NET:更快速地检查数据库服务器是否可访问?

时间:2010-05-04 00:13:34

标签: 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 (Exception e) {
        isConnected = false;

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

    return isConnected;
}

虽然这段代码很好,但是有一个缺点。如果服务器不在线,它会花费大约4整秒的时间尝试打开连接,然后再决定它是不可用的。

有没有办法测试连接而不试图实际打开它并等待超时?像数据库相当于ping的东西?

3 个答案:

答案 0 :(得分:3)

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

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

答案 1 :(得分:2)

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

"选择Sysdatetime()"

答案 2 :(得分:-2)

是和否。

您可以随时记下服务器侦听的端口,然后尝试使用套接字直接连接到该端口。然后,如果您成功,您可以“假设”它在线,但它可能不依赖于您的网络环境。这是最“平”的方法。当然,它可能是其他东西在那里听,但在数据库刚刚暂时停止的标准环境中,这可能不太可能。

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

最后一个选项是让一些后台服务器不断监视数据库服务器,当检测到它处于脱机状态时,它会正确标记一些内容。然后,您的应用会检查那个事物(实际上是一个缓存),它几乎是即时的。当然,这可能意味着它可能会出现假阴性(即服务器可能在线,但监控服务尚未更新缓存)。