什么是sql server连接字符串中的"连接超时"?

Tin*_*wor 38 sql sql-server

大家好我有以下连接字符串(从SQL服务器的属性获取):

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

我不明白是什么意思Timeout=30.有人能解释一下是什么意思吗?

Han*_*ing 56

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

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

  • 从链接我可以推断**不可能从连接字符串**设置命令超时.我们只能设置连接超时. (12认同)
  • 然而,可以使用 `SqlCommand.CommandTimeout` 属性(以秒为单位)设置命令超时。https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout(v=vs.110).aspx (3认同)

小智 11

Connect Timeout=30 意味着,在30秒内sql server应该建立连接.其他明智的当前连接请求将被取消.它用于避免连接尝试无限期等待.


Rae*_*Lee 8

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

连接超时指定必须与指定服务器建立连接的时间限制(以秒为单位),否则抛出异常,即它指定在建立数据库连接时允许程序保持多长时间.

DataSource=server;
InitialCatalog=database;
UserId=username;
Password=password;
Connection Timeout=30
Run Code Online (Sandbox Code Playgroud)

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

笔记:

  • 该值以秒为单位表示,而不是以毫秒为单位.

  • 默认值为30秒.

  • 值0表示无限期等待,永不超时.

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

  • 我知道这是几年前的,但默认是 15 秒,根据微软文档 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout (3认同)

Kni*_*ins 5

简而言之,连接是如何工作的

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

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

连接超时

连接超时以连接打开后的秒数为单位。

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

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

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

  • 值为 0表示永不放弃等待连接

注意:不建议使用 0 值,因为连接请求数据包或服务器响应数据包可能会丢失。您是否愿意认真准备等待一天,以获得可能永远不会到来的答复?

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

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

举个例子,对于白天每小时重复一次的任务,我知道我的网络总是在一秒内响应,因此为了安全起见,我将连接超时设置为 2。然后,我会再试三次,然后放弃并提出支持请求或升级类似的现有支持请求。

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