我正在编写一些代码,使用数据层进行crud操作。它使用adodb命令对象来执行t-sql语句,这些语句可以是存储过程、函数或内联sql。它最初使用默认命令超时30秒。数据库是ms sql。在错误处理程序中,会捕获超时错误-2147217871,并且commandtimeout值会加倍到3倍。所以第一次commandtimeout设置为60秒,第二次设置为120秒,然后是240秒。更新commandtimeout后,resume语句将在execute方法处恢复执行。
我遇到的问题是,一个更新存储过程在30秒时命中commandtimeout。错误处理程序将commandtimeout更新为60秒,并将执行设置回execute方法。execute方法完成时没有出错,但数据库记录没有更新。我试着将commandtimeout改为0,无限,这样当我在代码中单步执行时,就不必单步执行错误处理程序,突然更新成功了。设置commandtimeout使更新再次失败。我见过这个错误处理程序成功地工作了很多次。这是我第一次看到这种行为。有人知道问题出在哪里吗?
'timeout error, retry after doubling the timeout
If (Err.Number = -2147217871) And iRetryCount < iMaxRetrys Then
iRetryCount = iRetryCount + 1
spCmd.CommandTimeout = spCmd.CommandTimeout * 2
LocalTimer = Timer
Do While Timer < LocalTimer + 0.5 '.5 seconds
'just wait
Loop
Err.Clear
spCmd.ActiveConnection.Errors.Clear
Resume
暂无答案!
目前还没有任何答案,快来回答吧!