检查我是否在 C# 中连接到 SQL Server 的最快和正确的方法



我只想检查我是否有与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)
{
}

相关内容

  • 没有找到相关文章

最新更新