判断SQL Server是否可用的最快方法

时间:2009-07-10 01:59:41

标签: c# sql-server winforms network-programming

我有一个winform程序,它使用合并复制来保持本地SQL Express与我们网络上的中央SQL Server同步。由于此应用程序的性质,同步过程在应用程序打开和关闭时自动运行。我这样做(下面)似乎非常耗时。什么会更快?

如果我只是检查了服务器本身,那么在盒子外思考可能会没问题,虽然这可能会为服务器可用但SQL已关闭的边缘情况带来漏洞。或者,也许只是检查我们的域名是否可用虽然可能会留下同样的漏洞。

谢谢!

private static bool IsSqlAvailable()
    {
        try
        {
            var conn = new SqlConnection("Data Source=WWCSTAGE;Initial Catalog=Connect;Integrated Security=True");
            conn.Open();
            conn.Close();
            HUD.IsSQLAvailable = true;
            return true;
        }
        catch (Exception)
        {
            HUD.IsSQLAvailable = false;
            return false;
        }
    }

作为补充说明。关闭网络时上面特别慢。我甚至设置连接超时= 1,它在这一点上仍然存在很长一段时间。

5 个答案:

答案 0 :(得分:3)

我会将我的Connection包装在using子句中,并且可能会降低连接字符串中的连接超时(通常,如果服务器已启动,它应该比默认连接更快),但除此之外,它没关系。< / p>

答案 1 :(得分:2)

我在这种场景中的通常建议是,你要检查一些不受你控制的东西的存在/连接:不要。

您的支票可以通过,过了一会儿,结果不再正确。因此,假设SQL服务器可用,并尝试做任何你想做的事情,并优雅地处理不可避免的错误。

答案 2 :(得分:2)

我认为你可以问一下SQL Server TCP端口。 但是如果使用命名实例则存在问题。

答案 3 :(得分:0)

你可能会考虑这个问题。 SQL服务器的可用性基本上等同于您能够连接到它,因此我想说您尝试打开连接的方法非常有效。我唯一的建议是在您调用方法时分配HUD.IsSQLAvailable,因为您已经获得了返回值,而不是在IsSqlAvailable()内分配两次。

答案 4 :(得分:0)

我今天刚刚在我正在写作的应用程序中编写了一个测试连接方法。

我只是在connection.open和connection.close上使用一个简单的try catch方法,如果失败则捕获异常。如果你不需要它,你不必设置变量。只返回true或false。如果连接失败,它将挂起几秒钟。