在运行时更改SqlConnection超时

时间:2018-03-07 08:14:32

标签: c# sql-server ado.net

是否可以在运行时更改数据库连接超时?据我所知,唯一的方法是修改连接字符串,然后用修改后的连接字符串创建一个新的连接实例(替换字符串的超时属性)。

<add name="MyConnection" connectionString="Data Source=.\SQL2016;Initial Catalog=MyDatabase;Persist Security Info=False;User ID=DbUser;Password=DbPassword;Connection Timeout=6" providerName="System.Data.SqlClient" />

当尝试通过互联网连接到数据库时,服务上的某些方法可能需要超快失败,而其他方法可能有更多的宽限期。

是否有更简洁的方法来修改连接时间(因为数据库位于Internet资源上)?

注意:只对在运行时改变数据库连接时间感兴趣,我知道并且对更改命令执行时间不感兴趣。

亲切的问候,

的Stefan

更新

styx和Zohar Peled提供的答案更像是我所追求的,特别是在运行时创建连接实例之前,使用SqlConnectiongStringBuilder类来修改连接超时。

enter image description here

2 个答案:

答案 0 :(得分:4)

  

服务上的某些方法可能需要超快失败,而其他方法可能有更多的宽限期。

我假设您要更改CommandTimeout,这是查询运行的时间。

ConnectionTimeout是您的应用程序建立与sql server的连接所花费的时间。对于每个方法/调用/查询,此时间相等

using (SqlConnection sqlConnection = new SqlConnection(connstring))
{
    using (SqlCommand sqlCommand = new SqlCommand("SELECT * FROM FOO", sqlConnection))
    {
        sqlCommand.CommandTimeout = 60; //seconds here!

答案 1 :(得分:0)

你也可以改变connstring本身(可能有点矫枉过正)

        string constring = "Data Source=.\\SQL2016;Initial Catalog=MyDatabase;Persist Security Info=False;User ID=DbUser;Password=DbPassword;Connection Timeout=6\" providerName=\"System.Data.SqlClient";
        int index = constring.IndexOf("Connection Timeout=");
        var oldTimeOut = new String(constring.Substring(index).Split('=')[1].Where(Char.IsDigit).ToArray());            
        constring = constring.Replace("Connection Timeout="+oldTimeOut, "Connection Timeout=" + newTimeOut);