【发布时间】:2011-05-17 13:02:15
【问题描述】:
是否可以通过修改web.config中的连接字符串来增加超时时间?
【问题讨论】:
-
不要像我认为超时会控制查询执行那样阅读这篇文章——它不会,只有连接到服务器的超时——“连接超时”会是一个更好的名字。见stackoverflow.com/a/7976867/409856
标签: c# asp.net sql-server ado.net
是否可以通过修改web.config中的连接字符串来增加超时时间?
【问题讨论】:
标签: c# asp.net sql-server ado.net
是的,您可以将 ;Connection Timeout=30 附加到您的 connection string 并指定您希望的值。
Connection Timeout 属性中设置的超时值是以秒表示的时间。如果未设置此属性,则连接的超时值为默认值(15 秒)。
此外,将超时值设置为0,您指定您的连接尝试等待无限时间。如文档中所述,这是您不应该在连接字符串中设置的内容:
0 表示没有限制,应该避免 ConnectionString,因为连接尝试会无限期地等待。
【讨论】:
嗯……
正如 Darin 所说,您可以指定更高的连接超时值,但我怀疑这真的是问题所在。
当您遇到连接超时时,通常是以下情况之一出现问题:
网络配置 - 您的 Web 服务器/开发盒与 SQL 服务器之间的连接速度较慢。增加超时可能会纠正此问题,但调查潜在问题是明智的。
连接字符串。我已经看到不正确的用户名/密码由于某种原因会给出超时错误而不是指示“访问被拒绝”的实际错误的问题。这不应该发生,但这就是生活。
连接字符串 2:如果您指定的服务器名称不正确或不完整(例如,mysqlserver 而不是 mysqlserver.webdomain.com),您将获得超时。您可以从命令行使用服务器名称完全按照连接字符串中指定的方式 ping 服务器吗?
连接字符串 3:如果服务器名称在您的 DNS(或主机文件)中,但指向不正确或无法访问的 IP,您将获得超时而不是机器未找到错误。
您调用的查询超时。看起来与服务器的连接是问题,但是,根据您的应用程序的结构,您可能会一直到超时发生之前执行查询的阶段。
李>连接泄漏。有多少进程正在运行?有多少打开的连接?我不确定原始 ADO.NET 是否执行连接池、在必要时自动关闭连接(ala Enterprise Library)或所有配置的位置。这可能是一个红鲱鱼。但是,在使用 WCF 和 Web 服务时,我遇到了未关闭的连接导致超时和其他不可预测的行为的问题。
要尝试的事情:
使用 SQL Management Studio 连接到服务器时是否超时?如果是这样,网络配置可能是问题所在。如果您在使用 Management Studio 连接时没有发现问题,则问题出在您的应用程序中,而不是服务器上。
运行 SQL 事件探查器,看看实际发生了什么。您应该能够判断您是否真的在连接,或者查询是否是问题所在。
在 Management Studio 中运行您的查询,看看需要多长时间。
祝你好运!
【讨论】:
如果你想动态改变它,我更喜欢使用 SqlConnectionStringBuilder 。
它允许您将 ConnectionString 即字符串转换为类 Object,所有连接字符串属性都将成为其成员。
在这种情况下,真正的优势是您不必担心 ConnectionTimeout 字符串部分是否已存在于连接字符串中?
此外,它创建一个对象,并且在对象中分配值而不是操作字符串总是好的。
这是代码示例:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
【讨论】:
SqlConnection 类型上的ConnectionTimeout 属性设置为只读是个好主意。