我只想检查我是否有与SQL Server的连接,以便将我的本地数据库同步到它。如果我不必跳过它。
此外,它应该与无线网络和电缆连接一起使用。
当它与wifi连接一段时间时,我的网络已关闭,但该方法
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
返回 true,所以这种方法对我来说效果不佳。
我也尝试像那样检查与我的SQL Server的连接
public bool TestServerConnection()
{
using (SqlConnection openCon = new SqlConnection(connectionString))
{
try
{
string saveStaff = "select 1";
SqlCommand command = new SqlCommand(saveStaff, openCon);
command.CommandTimeout = 1;
openCon.Open();
if (openCon.State == ConnectionState.Open)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
}
使用此连接字符串
Data Source=CV-TED-SQL1;Initial Catalog = PulserDb; Integrated Security=true;MultipleActiveResultSets=True;
但是当我没有连接时,例如当我Data Source=CV-TED-SQL1;
更改为Data Source=CV-TED-SQL11;
时,openCon.Open();
大约需要 10 秒。
那太长了..
有什么最快的方法可以做到这一点吗?
我无法更改我的连接字符串,也许我只能为我的方法更改它,并在此方法结束时将其更改回来
感谢您的帮助。
编辑新的测试方法
public bool TestServerConnection()
{
Stopwatch stopwatch = Stopwatch.StartNew();
string tempCS = connectionString;
SqlConnectionStringBuilder scb = new SqlConnectionStringBuilder(tempCS);
scb.ConnectTimeout = 1;
using (SqlConnection openCon = new SqlConnection(scb.ToString()))
{
try {
string saveStaff = "select 1";
SqlCommand command = new SqlCommand(saveStaff, openCon)
{
CommandTimeout = 1
};
openCon.Open();
if (openCon.State == ConnectionState.Open)
{
stopwatch.Stop();
return true;
}
else
{
stopwatch.Stop();
return false;
}
}
catch (Exception)
{
stopwatch.Stop();
return false;
}
}
}
如果无法更改连接字符串以添加连接超时密钥,则可以在运行时使用 SqlConnectionStringBuilder 轻松更改连接字符串,如下所示
SqlConnectionStringBuilder scb = new SqlConnectionStringBuilder(connectionString);
scb.ConnectTimeout = 5; // 5 seconds wait 0 = Infinite (better avoid)
connectionString = scb.ToString();
Console.WriteLine(connectionString);
using(SqlConnection cnn = new SqlConnection(connectionString)
{
}