2016-10-22 29 views
0

我一直在试图检查数据库是否可访问并根据连接状态执行自定义操作。我的代码如下SqlServer连接字符串中的连接超时属性不工作

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块内的代码将在几秒钟内执行。但是如果无法建立连接,它将忽略连接超时属性并等待30秒钟,然后移至catch块。

我试了下面的链接connection timeout property in connection string ignored,发现没有成功。我尝试了5,10,15和20秒的连接超时值,似乎没有任何工作。

如果我的方法出现问题,请帮我解决。

谢谢!

回答

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以避免注入漏洞。