SQL服务器的连接超时
我可以通过修改web.config
的连接string来增加超时吗?
是的,你可以追加;Connection Timeout=30
到你的连接string,并指定你想要的值。
Connection Timeout
属性中设置的超时值是以秒为单位的时间 。 如果未设置此属性,则连接的超时值是默认值(15秒)。
而且,将超时值设置为0
,则表示您的连接尝试等待无限时间。 正如文档中所述,这是你不应该在你的连接string中设置的东西:
值为0表示没有限制,应该避免在ConnectionString中,因为连接尝试无限期地等待。
嗯…
正如Darin所说,你可以指定一个更高的连接超时值,但是我怀疑这确实是个问题。
当您连接超时时,通常是以下其中一个问题:
-
networkingconfiguration – 您的Web服务器/开发盒和SQL服务器之间的连接速度很慢。 增加超时可能会纠正这个问题,但调查潜在的问题是明智的。
-
连接string。 我遇到了一些问题,由于某些原因,不正确的用户名/密码会出现超时错误,而不是真正的错误,指示“访问被拒绝”。 这不应该发生,但这就是生活。
-
连接string2:如果您错误地或不完整地指定了服务器的名称(例如,
mysqlserver
而不是mysqlserver.webdomain.com
),则会发生超时。 你可以使用服务器的名称完全按照命令行连接string中的指定来ping服务器吗? -
连接string3:如果服务器名称在您的DNS(或主机文件)中,但指向一个不正确或无法访问的IP,您将得到一个超时,而不是一个机器找不到ish错误。
-
您正在调用的查询超时。 它可能看起来像连接到服务器是问题,但是,根据您的应用程序的结构,您可以在超时发生之前一直到执行查询的阶段。
-
连接泄漏。 有多less个进程正在运行? 多less个开放的连接? 我不确定原始ADO.NET是否执行连接池,在必要时自动closures连接ala Enterprise Library,或者所有configuration的位置。 这可能是一个红鲱鱼。 在使用WCF和Web服务时,我遇到了未closures连接的问题,导致超时和其他不可预知的行为。
试一试:
-
使用SQL Management Studio连接到服务器时会发生超时吗? 如果是这样,networkingconfiguration可能是问题。 如果在连接Management Studio时看不到问题,则问题将出现在应用程序中,而不是服务器上。
-
运行SQL事件探查器,并查看实际发生的事情。 你应该能够知道你是否真正连接,或者如果查询是问题。
-
在Management Studio中运行您的查询,并查看需要多长时间。
祝你好运!
如果你想dynamic地改变它,我更喜欢使用SqlConnectionStringBuilder 。
它允许你将ConnectionString(即一个string)转换成类Object,所有的连接string属性将成为它的成员。
在这种情况下,真正的好处是你不必担心如果ConnectionTimeoutstring部分已经存在于连接string中或者没有?
同样,因为它创build一个对象,它总是很好的分配对象的价值,而不是操纵string。
这是代码示例:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString); sscsb.ConnectTimeout = 30; var conn = new SqlConnection(sscsb.ConnectionString);