无法从连接字符串配置超时

Cannot configure timeout from connection string

我在 SQL Server 2008 R2 中创建了这个存储过程:

CREATE PROCEDURE dbo.test AS
BEGIN
    WAITFOR DEALY '00:00:40'
END

我还编写了一个 C# 控制台应用程序来测试连接超时 属性。

static void Main(string[] args)
{
    OpenSqlConnection();
    Console.ReadLine();
}

private static void OpenSqlConnection()
{
    string connectionString = GetConnectionString();

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (var command = new SqlCommand("dbo.test", connection) { CommandType = CommandType.StoredProcedure })
        {
            connection.Open();
            Console.WriteLine("ConnectionTimeout: {0}", connection.ConnectionTimeout);
            command.ExecuteNonQuery();
            Console.WriteLine("Finished");
            connection.Close();
        }
    }
}

static private string GetConnectionString()
{
    return
            "Data Source=test.com;Initial Catalog=test_db;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=10; Application Name=Test";
}

有一个连接超时异常作为异常返回(连接字符串超时 < 40 秒)。但是,当我将 Connect Timeout 属性 更改为 120 时,我仍然遇到相同的超时异常。经过反复试验,无论我的连接字符串值如何,超时值似乎始终为 30s。

连接超时是由其他地方控制的吗? (如果是,在哪里?)

为什么连接字符串中的连接超时值对我的控制台应用程序没有影响?

更新

谢谢大家。我刚刚注意到命令超时不同于连接超时(连接字符串中的超时)。

我必须按照 Sudipta Maiti 的建议指定 CommandTimeout 属性 并重新编译我的代码,而不是更改我的 app.config

有一个类似的问题: http://forums.asp.net/t/1197160.aspx?Can+you+change+command+timeout+via+the+connection+string+

使用 CommandTimeout:

using (var command = new SqlCommand("dbo.test", connection) {    
CommandType = CommandType.StoredProcedure })
{
      connection.Open();
      Console.WriteLine("ConnectionTimeout: {0}", 
      connection.ConnectionTimeout);
      command.CommandTimeout = 120;
      command.ExecuteNonQuery();
      Console.WriteLine("Finished");
      connection.Close();
}

我强烈怀疑给定的超时,它可能不足以完成您的操作。所以让它 Connection Timeout=30;

Connect Timeout -or- Connection Timeout 通过 default 值将是 15 秒。根据您的操作性能,您可能需要延长秒数。

当连接返回到连接池时,将其创建时间与当前时间进行比较,如果该时间跨度(以秒为单位)超过 Connection Lifetime 指定的值,则连接被销毁。这在集群配置中很有用,可以强制 运行 服务器和刚刚联机的服务器之间的负载平衡。

零 (0) 值会导致池连接具有最大连接超时。

There is a Sample Source almost same as yours.