SqlCommand.CommandTimeout和SqlConnection.ConnectionTimeout有什么区别?


Answers:


127

是。CommandTimeout一个命令完成所需的时间。ConnectionTimeout与服务器建立连接需要多长时间。

例如,您可能正在执行运行时间相对较长的查询-只需花10分钟即可完成查询,但这完全可以,但是如果花10分钟才能建立连接,那您就知道有些严重错误。


5
为了争辩,假设我有一个!**&#Q @?查询需要32秒才能运行。如果我将SqlCommand.CommandTimeout设置为40,但将SqlConnection.ConnectionTimeout保留为默认值(大概为30),则连接超时会否?换句话说,我必须同时设置两个属性吗?听起来您好像在说“不”,但我一定已经忘记了SqlConnection.ConnectionTimeout属性,并开始质疑设置CommandTimeout是否可以完成我需要的一切。
flipdoubt

28
flipdoubt-CommandTimeout将影响查询,而ConnectionTimout则不会。ConnectionTimout不是针对peform查询的连接的超时-只是连接首先连接到数据库的超时。
罗宾·贝内特

1
@JonSkeet做CommandTimeout和ConnectionTimeout,都生成相同的常见异常吗?还是不同的例外?
亚西·谢赫

1
@Yasser:恐怕我不知道。
Jon Skeet

6
请记住,CommandTimeout似乎仅适用于直到第一行从SQL Server返回到客户端代码为止。例如,如果您有一个查询在30秒内返回第一行,但是完整的行集需要数小时才能返回,则将超时设置为30秒将不会使查询超时,并且查询将运行数小时。如果您在执行计划的LHS上没有阻塞运算符(例如Order by),通常就是这种情况。(发帖是因为我花了2天的时间对此进行调试,对此主题没有其他参考)
Dave

28

SqlCommand.CommandTimeout= SQL查询的超时限制。意思是一个(例如:SELECTUPDATE)查询执行所需的时间。如果超过SqlCommand.CommandTimeout,则停止执行。将出现命令超时错误。

SqlConnection.ConnectionTimeout=您的连接超时限制。意思是您的连接对象可以尝试连接多少时间。如果超过指定时间,它将停止连接。连接超时错误将发生。


11

ConnectionTimeout指定时间到时间之前等待试图外出时打开SqlConnection。与Connection.Open()命令有关。

SqlCommand.CommandTimeout指定超时之前SqlCommand等待的持续时间。这是在打开连接并ExecuteXXX在Command对象上调用了其中一种方法之后发生的。


8

附加信息

默认值为CommandTimeout30秒。零(0)表示没有限制。你可以设定CommandTimeout在“编码”中值。

默认值为ConnectiontTimeout15秒。零(0)也表示没有限制。小于零值(负值)将得到ArgumentException。您可以ConnectionTimeout在编码和配置文件中设置值。


0
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms

2
这是第三种超时。主题所有者询问的两个主题都不是其中之一。而且没有回答这个问题。我不会-1,因为在编辑之前我不知道问题是什么。
Csaba Toth

0

关于CommandTimeout的快速说明,因为它是Connection和Command对象的属性...

Connection对象上的CommandTimeout设置对同一Connection上Command对象上的CommandTimeout设置没有影响。也就是说,Command对象的CommandTimeout属性不会继承Connection对象的CommandTimeout值。

因此,Connection对象上的CommandTimeout设置仅影响仅在Connection对象下执行的命令(不使用Command对象)。

例如,当您连接到存储的Proc并将参数添加到命令对象,并使用连接对象的连接执行命令对象时,则需要在命令对象上设置CommandTimeout,在连接对象上设置ConnectionTimeout才能覆盖两者默认值。在连接对象上设置CommandTimeout不会覆盖命令对象命令的默认超时。

https://docs.microsoft.com/zh-CN/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/zh-CN / sql / ado / reference / ado-api / connectiontimeout-property-ado?view = sql-server-ver15

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.