繁体   English   中英

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

[英]Fastest way to tell if SQL Server is available

我有一个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;
        }
    }

作为附加说明。 脱离网络时,上述速度特别慢。 我什至将Connection Timeout设置为1,它在此时仍处于相当长的时间。

我会将我的Connection包装在using子句中,并可能降低连接字符串中的连接超时(通常,如果服务器启动,它的连接速度应比默认值更快),但是除此之外,还可以。

在这种情况下,我通常的建议是:检查是否存在无法控制的事物的存在/连通性。

您的支票可以通过,稍后,结果将不再正确。 因此,假设SQL Server可用,只需尝试做您想做的任何事情,然后优雅地处理不可避免的错误即可。

我想您可以问一下SQL Server TCP端口。 但是,如果使用命名实例,则会出现问题。

您可能很难考虑这个问题。 SQL Server的可用性实质上等同于您能够连接到它,因此我想说您尝试打开连接的方法是非常有效的。 我唯一的建议是在调用该方法的位置分配一次HUD.IsSQLAvailable ,因为您已经在获取一个返回值,而不是在IsSqlAvailable()内部分配两次。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM