SQL Server的连接超时

zac*_*ary 109 c# sql-server asp.net ado.net

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

Dar*_*rov 212

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

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

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

值0表示没有限制,应该在ConnectionString中避免,因为尝试连接无限期等待.

  • 仅供参考:连接超时= 0是无限的. (5认同)
  • 这个超时是几分钟还是几秒钟? (4认同)
  • @saulyasar这是CONNECTION超时,而不是COMMAND超时.CONNECTION超时是指尝试连接到SQL Server的时间.您想要调查COMMAND超时,它是一个过程或语句在超时之前运行的时间. (4认同)
  • 连接超时= 0听起来不是一个好主意 (3认同)

3Da*_*ave 31

嗯...

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

当您获得连接超时时,通常会出现以下问题之一:

  1. 网络配置 - Web服务器/ dev框与SQL Server之间的连接速度较慢.增加超时可以纠正这个问题,但调查潜在问题是明智之举.

  2. 连接字符串.我见过一些问题,不正确的用户名/密码会出于某种原因发出超时错误而不是真正的错误,表明"访问被拒绝".这不应该发生,但这就是生活.

  3. 连接字符串2:如果您错误地或不完整地指定了服务器的名称(例如,mysqlserver而不是mysqlserver.webdomain.com),则会出现超时.您是否可以使用与命令行的连接字符串中指定的服务器名称完全相同的服务器名称来ping服务器?

  4. 连接字符串3:如果服务器名称在DNS(或主机文件)中,但指向不正确或无法访问的IP,则会出现超时而不是机器未找到错误.

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

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

要尝试的事情:

  1. 使用SQL Management Studio连接到服务器时是否会出现超时?如果是这样,网络配置可能是问题.如果在与Management Studio连接时没有发现问题,则问题出在您的应用程序中,而不是服务器上.

  2. 运行SQL事件探查器,查看实际传输的内容.您应该能够判断您是否真的在连接,或者查询是否是问题.

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

祝好运!


Imr*_*zvi 11

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

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

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

此外,它创建一个Object,它总是很好地在对象中赋值而不是操纵字符串.

这是代码示例:

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

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);
Run Code Online (Sandbox Code Playgroud)

  • 我无法相信将`SqlConnection`类型的`ConnectionTimeout`属性设为只读被认为是个好主意. (2认同)