2010-11-29 165 views
97

我可以通过修改web.config中的连接字符串来增加超时吗?SQL服务器的连接超时

+2

不要读这个像我一样想的超时将控制查询执行 - 它没有,只有超时连接到服务器 - “连接超时“会是一个更好的名字。请参阅http://stackoverflow.com/a/7976867/409856 – downwitch 2014-05-30 19:07:49

回答

183

是的,你可以追加;Connection Timeout=30connection string并指定希望的值。

Connection Timeout属性中设置的超时值是时间,以秒为单位。如果未设置此属性,则连接的超时值为默认值(15秒)。

此外,将超时值设置为0,您指定您的连接尝试等待无限时间。如文档中所描述的,这是后话,你不应该在连接字符串中设置:

值为0表示没有限制,并且应该以 的ConnectionString避免,因为试图无限期地等待连接。

+4

这是超时在分钟还是秒? – user1 2013-07-08 21:14:51

+1

@ user1“终止尝试并生成错误之前,等待连接到服务器的时间长度(以秒为单位)。” – Santux 2013-07-30 15:03:13

+5

参考:连接超时= 0是无限的。 – 2013-08-27 12:11:26

29

嗯...

正如达林说,你可以指定一个较高的连接超时值,但我怀疑这是真正的问题。

当你连接超时,它通常具有以下的一个问题:

  1. 网络配置 - 你的web服务器的/ dev框和SQL服务器之间的连接速度很慢。增加超时时间可能会纠正这种情况,但调查潜在问题是明智之举。

  2. 连接字符串。我遇到了一些问题,出于某种原因,不正确的用户名/密码会出于某种原因发出超时错误,而不是真正的错误,指示“访问被拒绝”。这不应该发生,但这就是生活。

  3. 连接字符串2:如果您错误地或不完整地指定了服务器的名称(例如,mysqlserver而不是mysqlserver.webdomain.com),则会发生超时。您能否使用服务器名称来严格按照命令行中的连接字符串中的指定来ping服务器?

  4. 连接字符串3:如果服务器名称在您的DNS(或主机文件)中,但指向错误或无法访问的IP,您将得到超时而不是机器未发现的ish错误。

  5. 您打电话的查询超时。它可能看起来像连接到服务器是问题,但根据您的应用程序的结构,您可以在超时发生之前将它一直发送到执行查询的阶段。

  6. 连接泄漏。有多少个进程正在运行?多少个开放连接?我不确定原始的ADO.NET是否执行连接池,在必要时自动关闭连接ala Enterprise Library,或者所有配置的位置。这可能是一个红鲱鱼。但是,在使用WCF和Web服务时,我遇到了导致超时和其他不可预知行为的未关闭连接的问题。

事情尝试:

  1. 你得到一个超时连接到使用SQL Management Studio中的服务器时?如果是这样,网络配置可能是问题。如果连接Management Studio时看不到问题,则问题将出现在您的应用程序中,而不是服务器中。

  2. 运行SQL事件探查器,查看实际发生的事情。你应该能够知道你是否真的连接,或者如果查询是问题。

  3. 在Management Studio中运行您的查询,并查看需要多长时间。

祝你好运!

10

如果要动态更改它,我更喜欢使用SqlConnectionStringBuilder

它允许您将ConnectionString(即字符串)转换为类Object,所有连接字符串属性将成为其成员。

在这种情况下,真正的优点是您不必担心ConnectionTimeout字符串部分是否已经存在于连接字符串中?

另外,因为它创建一个对象,它总是很好的在对象中赋值,而不是操纵字符串。

下面是代码示例:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString); 

sscsb.ConnectTimeout = 30; 

var conn = new SqlConnection(sscsb.ConnectionString);