我一直在尝试检查数据库是否可访问,并根据连接状态执行自定义操作。我的代码如下
string connectionString = "Data Source =" + textBox1.Text + ";Initial Catalog=master;Integrated Security=true;Connect Timeout=1";
SqlConnection connection = new SqlConnection(connectionString);
try
{
connection.Open();
//do some action
connection.Close();
}
catch (SqlException)
{
connection.Close();
//do some action
}
我通过TextBox提供目标机器名称。在上面的代码中,只要成功建立连接,try块中的代码就会在几秒钟内执行。但是如果无法建立连接,它将忽略Connect Timeout属性并等待30秒后再移动到catch块。
我尝试了以下链接connection timeout property in connection string ignored,但没有成功。我尝试过连接超时值5,10,15和20秒,似乎没有任何效果。
如果我的方法有问题,请帮帮我。
谢谢!
答案 0 :(得分:1)
您需要指定正确的连接字符串关键字Connection Timeout=1
。
根据我的经验,引发异常之前的实际时间可能比错误是由服务器无法访问而不是完整连接池指定的时间长几秒,这会导致InvalidOperationException而不是SqlException。我建议使用using
块来确保测试连接立即处理:
try
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
}
}
catch (SqlException ex)
{
//do some action
}
catch (InvalidOperationException ex)
{
//do some action
}
考虑使用SqlConnectionStringBuilder class来避免注入漏洞。