SqlCommand.CommandTimeout
.NET和SqlConnection.ConnectionTimeout
.NET之间有什么区别吗?
6 回答
是的。CommandTimeout
是完成单个命令需要多长时间。ConnectionTimeout
是开始与服务器建立连接需要多长时间。
例如,您可能正在执行运行时间相对较长的查询——它们需要 10 分钟才能完成是完全可以的,但如果开始连接需要 10 分钟,您就会知道出现了严重错误。
SqlCommand.CommandTimeout
= SQL 查询的超时限制。SELECT
意味着,(例如: , )查询可以花费多少时间UPDATE
来执行。如果超过SqlCommand.CommandTimeout
,则停止执行。将发生命令超时错误。
SqlConnection.ConnectionTimeout
= 连接的超时限制。意味着,您的连接对象可以尝试连接多长时间。如果超过指定时间,则停止连接。将发生连接超时错误。
ConnectionTimeout
指定尝试打开SqlConnection
. 它与Connection.Open()
命令有关。
尽管
SqlCommand.CommandTimeout
指定 SqlCommand 在超时之前等待的持续时间。这发生在打开连接并且ExecuteXXX
在 Command 对象上调用其中一个方法之后。
附加信息
默认值为CommandTimeout
30 秒。零 (0) 表示没有限制。您只能CommandTimeout
在编码中设置值。
默认值为ConnectiontTimeout
15 秒。零(0)也表示没有限制。小于零值(负值)将得到ArgumentException
. 您可以ConnectionTimeout
在编码和配置文件中设置值。
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
关于 CommandTimeout 的快速说明,因为它是 Connection 和 Command 对象的属性...
Connection 对象上的 CommandTimeout 设置对同一 Connection 上的 Command 对象上的 CommandTimeout 设置没有影响;也就是说,Command 对象的 CommandTimeout 属性不继承 Connection 对象的 CommandTimeout 值。
因此 Connection 对象上的 CommandTimeout 设置仅影响在 Connection 对象下执行的命令(不使用 Command 对象)。
例如,当您连接到存储过程并向命令对象添加参数并使用连接对象的连接执行命令对象时,您需要在命令对象上设置 CommandTimeout 并在 Connection 对象上设置 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