我有一个带有更新存储过程的 QueriesTableAdapter 需要很长时间才能执行。我正在尝试增加从中调用存储过程的查询表适配器的命令超时属性。
存储过程是一种维护例程,一个进程通过 Web 服务不经常调用它。
请注意:它是 QueriesTableAdapter 而不是 TableAdapter,我使用的是 .net 4.5 VS 2012
在我的 DAL 后面的代码中,我添加了以下内容:
Namespace mbr_AccountTableAdapters
Partial Public Class QueriesTableAdapter
''' <summary>
''' Sets the commant timeout.
''' Set to 0 to specify the longest timout value supported by the db.
''' </summary>
Public WriteOnly Property CommandTimeout As Integer
Set(value As Integer)
If Not IsNothing(Me._commandCollection) Then
For Each cmd As System.Data.IDbCommand In Me._commandCollection
cmd.CommandTimeout = value
Next
End If
End Set
End Property
End Class
End Namespace
然后我可以使用 BLL 中的以下代码运行我的存储过程:
Dim rows As Integer = 0 'number of affected rows
Using myQTA As New DAL.mbr_AccountTableAdapters.QueriesTableAdapter
'increase the command timeout:
myQTA.CommandTimeout = 0 '0 = larget value possible
Dim queryResult As Object
queryResult = myQTA.usrsp_mbr_account_CleanupInactive()
If Not IsNothing(queryResult) Then
rows = Convert.ToInt32(queryResult)
End If
End Using
我收到以下错误:
[Win32Exception (0x80004005): 等待操作超时]
[SqlException (0x80131904): 超时。在操作完成之前超时时间已过或服务器没有响应。]
请注意,查询有效 - 连接没有问题或任何其他错误。如果我将需要处理的数据量减少到一小部分数据,则查询运行不会出错。
问题是当它需要超过 30 秒时。
查询恰好在 30 秒后超时。
在 web.config 中的数据库连接字符串中添加 'Connection Timeout=90' 没有任何区别,它在 30 秒后仍然超时。