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

时间:2015-11-11 05:33:00

标签: c# sql-server database-connection connection-timeout

我在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";
}

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

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

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

更新

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

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

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

2 个答案:

答案 0 :(得分:0)

使用CommandTimeout:

for (i = 0; i < 10; i++) {
    setTimeout((function(num) {
        console.log(num);
    }).bind(this, i), 5000 * i);
}

答案 1 :(得分:0)

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

<Connect Timeout -or- Connection Timeout default 15的值为<div dir-one dir-two></div> 秒。根据您的操作性能,您可能需要延长秒数。

当连接返回到池时,会将其创建时间与当前时间进行比较,如果该时间跨度(以秒为单位)超过Connection生命周期指定的值,则会破坏连接。这在群集配置中非常有用,可以在正在运行的服务器和刚刚联机的服务器之间强制实现负载平衡。

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

There is a Sample Source almost same as yours.