我有一个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,它在这一点上仍然存在很长一段时间。
答案 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。如果连接失败,它将挂起几秒钟。