SQL 服务器连接字符串中的"Connect Timeout"是什么?



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

Data Source=(LocalDB)v11.0;AttachDbFilename=C:UsersmyUserDesktopadoBancheBanchebinDebugbanche.mdf;Integrated Security=True;Connect Timeout=30

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

这是创建连接的超时,而不是通过该连接执行命令的超时。

例如,请参见http://www.connectionstrings.com/all-sql-server-connection-string-keywords/(注意,属性是"连接超时"(或"连接超时),而不仅仅是"连接";超时")


来自评论:

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

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

连接超时=30表示数据库服务器有30秒的时间建立连接。

连接超时指定时间限制(以秒为单位),在该时间限制内必须连接到指定的服务器,否则将引发异常,即,它指定在程序建立数据库连接时,程序将被搁置多长时间。

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

SqlConnection.ConnectionTimeout。指定SQL Server服务对连接尝试的响应秒数。这始终设置为连接字符串的一部分。

注:

  • 该值以秒表示,而不是以毫秒表示。

  • 默认值为30秒。

  • 值为0意味着无限期等待,永远不会超时。

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

Connect Timeout=30意味着,sql server应在30秒内建立连接。否则,当前连接请求将被取消。它用于避免连接尝试无限期等待。

连接的工作原理

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

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

连接超时

连接超时以秒为单位,从打开连接开始计算。

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

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

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

  • 值为0意味着永远不要放弃等待连接

注意:不建议值为0,因为连接请求数据包或服务器响应数据包可能会丢失。你会认真准备等待哪怕一天,等待可能永远不会到来的回应吗

我应该将"连接超时"值设置为什么

此设置应取决于网络速度以及允许线程等待响应的准备时间。

例如,在一天中每小时重复一次的任务中,我知道我的网络总是在一秒钟内做出响应,所以为了安全起见,我将连接超时设置为2。然后我会再试三次,然后放弃,要么提出支持票,要么升级类似的现有支持票。

测试你自己的网络速度,并考虑当连接一次性失败时,以及当它重复或偶尔失败时该怎么办。

获取尝试建立连接时在终止尝试并生成错误之前等待的时间。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout%28v=vs.110%29.aspx

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

获取在尝试建立连接时等待的时间,然后再终止尝试并生成错误。(MSDN,SqlConnection.ConnectionTimeout Property,2013)

默认情况下,连接超时为240,但如果您面临连接超时的问题,则可以增加到"300"连接超时=300"

最新更新