.NET中SqlCommand.CommandTimeout
和SqlConnection.ConnectionTimeout
之间有什么区别吗?
答案 0 :(得分:114)
是。 CommandTimeout
是单个命令可以完成的时间。 ConnectionTimeout
是建立与服务器的连接所需的时间。
例如,您可能正在执行相对长时间运行的查询 - 完全可以让他们花10分钟完成,但是如果花费10分钟来建立连接,您就会知道某些事情很严重错。
答案 1 :(得分:27)
SqlCommand.CommandTimeout = SQL查询的超时限制。意味着一个(例如:SELECT,UPDATE)查询可以花多少时间执行它。如果它超过SqlCommand.CommandTimeout,则它会停止执行。将发生命令超时错误。
SqlConnection.ConnectionTimeout =您的连接的超时限制。意味着您的连接对象可以尝试连接多长时间。如果超过指定时间,则停止连接。将发生连接超时错误。
答案 2 :(得分:10)
ConnectionTimeout
指定在尝试打开 SqlConnection
时超时前等待的持续时间。它与Connection.Open()
命令相关。
,而
SqlCommand.CommandTimeout
指定SqlCommand在超时之前等待的持续时间。在打开连接并且在Command对象上调用了ExecuteXXX
个方法之一后,会发生这种情况。
答案 3 :(得分:7)
其他信息
CommandTimeout
的默认值为30秒。零(0)表示没有限制。您只能在“编码”中设置CommandTimeout
值。
ConnectiontTimeout
的默认值为15秒。零(0)表示没有限制。小于零的值(减去值)将获得ArgumentException
。您可以在Coding和Config文件中设置ConnectionTimeout
值。
答案 4 :(得分:0)
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
答案 5 :(得分:0)
关于CommandTimeout的快速说明,因为它既是Connection对象又是Command对象的属性...
Connection对象上的CommandTimeout设置对同一Connection上Command对象上的CommandTimeout设置无效;也就是说,Command对象的CommandTimeout属性不会继承Connection对象的CommandTimeout值。
因此,Connection对象上的CommandTimeout设置仅影响仅在Connection对象下执行的命令(不使用Command对象)。
例如当您连接到Stored Proc并将参数添加到命令对象,并使用连接对象的连接执行命令对象时,则需要在命令对象上设置CommandTimeout,在连接对象上设置ConnectionTimeout才能覆盖这两个默认值。在连接对象上设置CommandTimeout不会覆盖命令对象命令的默认超时。
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/connectiontimeout-property-ado?view=sql-server-ver15