连接超时属性在连接字符串中被忽略。

13
我正在用C#构建一个应用程序。我正在使用类似的连接字符串:
DSN=SomeDataSource; Trusted Connection=yes; Uid=SomeId; pwd=somePwd; Connection Timeout=x

无论我将x设置为什么值(连接超时 = x),通过设置断点,我可以看到我的DbConnection对象的ConnectionTimeout属性始终具有默认值15
我在这里漏掉了什么吗?
谢谢。

你是想将X设置得比15更高还是更低?你确认它实际上是在15超时,而不是在X处(例如,你正在查看的值可能是一个误导)。此外,提供更多的代码和/或上下文会更有帮助(例如,你是否连接到Oracle DB等)。 - Andy Jacobs
我也遇到了这个问题。奇怪的是,我添加了日志来确认使用的连接字符串和所需时间,但我只得到了9或10秒,而不是我要求的120秒或默认的15秒。 - JohnOpincar
1
这里也是一样的情况。尝试了Connect Timeout=5和Connection Timeout=5,但都被忽略了,它需要15。也许15是最小值? - AndyM
你解决了这个问题吗?我也遇到了类似的问题。 - user1
3个回答

22

Connection Timeout 在 ConnectionString 中仅控制连接的超时时间。如果您需要增加命令的等待时间,请使用 SqlCommand 的 CommandTimeout 属性。


谢谢你的好意! - Dave Kelly

1

我没有看到你所指示的行为,至少在我使用SqlConnectionStringBuilder测试场景时没有。

连接的ConnectionTimeout属性与构建器设置的ConnectTimeout相匹配。我使用了520120作为值,并且所有这些值都被设置在连接上。

using System.Data.SqlClient;

var builder = new SqlConnectionStringBuilder();

builder.ApplicationName     = "My Demo App";
builder.ConnectTimeout      = 5;
builder.DataSource          = "(local)";
builder.InitialCatalog      = "My Database";
builder.IntegratedSecurity  = true;

using(var connection = new SqlConnection(builder.ConnectionString))
{
    Console.WriteLine("Connection Timeout: {0}", connection.ConnectionTimeout);
}

如果您不涉及SQL,您也可以考虑使用DbConnectionStringBuilder或其子类型之一。通常情况下,我发现最安全的方法是使用可用的构建器之一以编程方式构建连接字符串,这样您就可以避免使用创建连接所需的任何错误格式。


-1

是的,15是最低要求,具体取决于您正在做什么。可能是每个供应商不同。我甚至发现在使用 SQL Native Client 时,尝试使用少于15个连接(使用某些第三方控件)会导致无限超时。真糟糕。当我将其设置为15或更高时,它的表现符合预期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接