代码之家  ›  专栏  ›  技术社区  ›  Stefan Zvonar

在运行时更改SqlConnection超时

  •  0
  • Stefan Zvonar  · 技术社区  · 6 年前

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

    <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连接到数据库时,服务上的某些方法可能需要非常快才能失败,而另一些方法可以有更多的宽限期。

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

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

    谨致问候,

    斯特凡

    更新

    styx和ZoharPeled提供的答案更符合我的要求,尤其是利用 SqlConnectiongStringBuilder 类在运行时创建连接实例之前修改连接超时。

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  5
  •   fubo    6 年前

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

    我想你想改变 CommandTimeout 这是查询运行所需的时间。

    这个 ConnectionTimeout 是应用程序与sql server建立连接所需的时间。这次是 相同的 对于每个方法/调用/查询。

    using (SqlConnection sqlConnection = new SqlConnection(connstring))
    {
        using (SqlCommand sqlCommand = new SqlCommand("SELECT * FROM FOO", sqlConnection))
        {
            sqlCommand.CommandTimeout = 60; //seconds here!
    
        2
  •  0
  •   styx    6 年前

    您还可以更改 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);