在SQL Server连接字符串中,“Connect Timeout”是什么意思?

90

我有以下连接字符串(从sql server属性中获取):

Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\myUser\Desktop\adoBanche\Banche\bin\Debug\banche.mdf;Integrated Security=True;Connect Timeout=30

我不理解 Timeout=30 是什么意思。有人可以解释一下吗?


5
如果30秒内没有连接成功,它就会停止尝试。 - Mihai
8个回答

127

这是创建连接的超时时间,而不是执行在该连接上的命令的超时时间。

例如,参见http://www.connectionstrings.com/all-sql-server-connection-string-keywords/(请注意,属性是“Connect Timeout”(或“Connection Timeout”),而不仅仅是“Timeout”)


来自评论:

无法通过连接字符串设置命令超时时间。但是,SqlCommand具有CommandTimeout属性(从DbCommand派生),您可以设置每个命令的超时时间(以秒为单位)。

请注意,当使用Read()循环查询结果时,每次读取都会重置超时时间。超时时间适用于每个网络请求,而不是适用于整个连接。


21
从链接中我可以得出结论:无法通过连接字符串设置命令超时时间,我们只能设置连接超时时间。 - RBT
5
可以使用SqlCommand.CommandTimeout属性(以秒为单位)来设置命令超时时间。https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.commandtimeout(v=vs.110).aspx - P.Brian.Mackey
1
如果您正在使用EF,或者通过设置objectContext.CommandTimeout属性,来调整命令超时时间。 - Mujib Khan
SqlConnectionStringBuilder 提供了 CommandTimeout 属性,用于将命令超时添加到您的连接字符串中。 - Will
@Will 你非常确定这不是一个ConnectTimeout吗? - Hans Kesting
@HansKesting 以下链接显示了我所提到的 SqlConnectionStringBuilder 的 CommandTimeout 属性的文档。CommandTimeout 的默认值显然为30秒。https://learn.microsoft.com/en-us/dotnet/api/microsoft.data.sqlclient.sqlconnectionstringbuilder.commandtimeout?view=sqlclient-dotnet-standard-5.1 - Will

23

Connection Timeout=30 意味着数据库服务器有30秒时间建立连接。

Connection Timeout 指定了连接到指定服务器的时间限制(以秒为单位),否则将抛出异常,即它指定了您允许程序在建立数据库连接时被阻塞的时间长度。

DataSource=server;
InitialCatalog=database;
UserId=username;
Password=password;
Connection Timeout=30

SqlConnection.ConnectionTimeout指定 SQL Server 服务响应连接尝试的超时时间,单位为秒。这通常作为连接字符串的一部分来设置。

注意:

  • 该值以秒为单位而非毫秒。

  • 默认值为30秒。

  • 值为0表示无限等待,永不超时。

此外,SqlCommand.CommandTimeout指定在 SQL Server 上运行的特定查询的超时值,但是这是通过 SqlConnection 对象/设置(取决于您的编程语言)设置的,而不是在连接字符串中设置,即它指定了您允许程序在运行命令时被阻塞的时间长度。


7
我知道这个内容有点旧了,但默认值是15秒,根据微软文档 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout - Stephen

17

Connect Timeout=30 的意思是,在30秒内SQL Server应该建立连接。否则当前的连接请求将被取消。它用于避免连接尝试无限期等待。


5

连接是如何工作的

程序与数据库服务器之间的连接依赖于握手。

这意味着当连接打开时,建立连接的线程将向数据库服务器发送网络数据包。然后,这个线程将暂停,直到从数据库服务器接收到关于此连接的网络数据包或连接超时时间到期为止。

连接超时时间

连接超时时间是从连接打开时开始计算的秒数。

当超时时间到期时,线程将继续运行,但它会报告连接失败。

  • 如果在连接字符串中未指定连接超时值,则默认值为30

  • 大于零的值表示在放弃之前等待的秒数,例如10表示等待10秒。

  • 0的值表示永远不放弃等待连接。

注意:不建议使用0的值,因为连接请求数据包或服务器响应数据包可能会丢失。你真的愿意等待一天甚至可能永远不会得到回应吗?

我应该将连接超时值设置为多少?

这个设置应该取决于你的网络速度以及你准备让线程等待响应多长时间。

举个例子,在白天每小时重复一次的任务上,我知道我的网络总是在一秒钟内响应,所以我将连接超时设置为2,以确保安全。如果连续三次尝试失败,我将提交支持票或升级现有支持票。

测试你自己的网络速度,并考虑当连接仅仅一次失败,以及当它反复和零星地失败时该怎么办。


3

1

连接请求和超时错误之间的最大时间。当客户端尝试建立连接时,如果超时等待限制达到了,它将停止尝试并引发一个错误。


1
获取在尝试建立连接之前等待的时间,超过该时间将终止连接尝试并生成错误。(MSDN, SqlConnection.ConnectionTimeout Property, 2013)

-5

默认连接超时时间为240,但如果您遇到连接超时问题,则可以将其增加到“300”“Connection Timeout=300”


6
默认值为30秒。 - Escobar5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接