目前我正在使用此代码检查数据库是否可访问:
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的东西?
答案 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它。但这只会检查机器是否已启动,而不是数据库服务器。
最后一个选项是让一些后台服务器不断监视数据库服务器,当它检测到它处于脱机状态时,它会正确标记一些内容。然后,您的应用会检查那个事物(实际上是一个缓存),它几乎是即时的。当然,这可能意味着它可能会出现假阴性(即服务器可能在线,但监控服务尚未更新缓存)。