SQL 服务器的连接超时

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

321380 次浏览

是的,您可以将 ;Connection Timeout=30附加到 连接字符串并指定您希望的值。

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

此外,将超时值设置为 0,则指定连接尝试等待无限时间。正如文档中所描述的,您不应该在连接字符串中设置以下内容:

值0表示没有限制,应在 ConnectionString,因为连接尝试无限期地等待。

嗯..。

正如 Darin 所说,您可以指定一个更高的连接超时值,但我怀疑这是否真的是问题所在。

When you get connection timeouts, it's typically a problem with one of the following:

  1. Network configuration - slow connection between your web server/dev box and the SQL server. Increasing the timeout may correct this, but it'd be wise to investigate the underlying problem.

  2. 连接字符串。我看到过这样的问题: 由于某种原因,错误的用户名/密码会给出超时错误,而不是指示“访问被拒绝”的实际错误这不应该发生,但这就是生活。

  3. 连接字符串2: 如果您指定的服务器名称不正确或不完全(例如,mysqlserver而不是 mysqlserver.webdomain.com) ,您将得到一个超时。您能从命令行中使用服务器名 完全与连接字符串中指定的相同来 ping 服务器吗?

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

  5. 您正在调用的查询是超时。看起来与服务器的连接是个问题,但是,取决于应用程序的结构,您可能会在超时发生之前一直处于查询正在执行的阶段。

  6. 连接泄漏。正在运行多少个进程?有多少个打开的连接?我不确定原始 ADO.NET 是否执行连接池,在必要时自动关闭连接,比如企业库,或者在配置了所有连接的地方。这可能是转移注意力。但是,在使用 WCF 和 Web 服务时,我遇到过未关闭连接导致超时和其他不可预测行为的问题。

可以尝试的事情:

  1. Do you get a timeout when connecting to the server with SQL Management Studio? If so, network config is likely the problem. If you do not see a problem when connecting with Management Studio, the problem will be in your app, not with the server.

  2. 运行 SQL Profiler,查看整个连接中实际发生了什么。您应该能够判断您是否真的在连接,或者查询是否是问题所在。

  3. 在 ManagementStudio 中运行查询,并查看查询所需的时间。

祝你好运!

如果您想动态地更改它,我更喜欢使用 SqlConnectionStringBuilder

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

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

同时,它创建了一个 Object,并且它总是有利于在 Object 中分配值,而不是操作字符串。

下面是代码示例:

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


sscsb.ConnectTimeout = 30;


var conn = new SqlConnection(sscsb.ConnectionString);