我试图在事务中使用简单的INSERT查询在表中插入一行。它在SQL Server中工作正常,但我无法使用我的业务对象插入数据。
我使用Command调用SELECT查询:
Using cm As New SqlCommand
With cm
.Connection = tr.Connection
.Transaction = tr
.CommandType = CommandType.Text
.CommandText = Some Select Query
.ExecuteScalar()
'' Do something
.CommandText = Insert Query
.ExecuteNonQuery()
End With
End Using
我在“.ExecuteNonQuery()”行收到Timeout period expired错误。
此时任何其他DML查询都运行得很好。
谁能告诉我原因?
答案 0 :(得分:0)
Management Studio将其连接设置为不超时,这可以解释为什么它在那里工作。您可以通过将连接的.Timeout
属性设置为0来在代码中执行此操作。但是,除非确实表示它,否则不建议这样做。
相反,我们需要弄清楚需要花费多长时间。 Management Studio查询需要很长时间才能完成吗?可以等待事务提交吗?您可以了解应用程序花费时间的位置吗?
答案 1 :(得分:0)
您的查询似乎使用错误的查询计划。尝试设置ARITHABORT ON,这应绕过查询计划:
Dim arithabortCmd As New SqlCommand("SET ARITHABORT ON", cn)
arithabortCmd.ExecuteNonQuery()
我会确保通过在数据库上执行此SQL来更新数据库索引:
-- Execute this to rebuild all for a given database. Replace the <databasename> after EXEC.
EXEC <databasename>..sp_MSforeachtable @command1='DBCC DBREINDEX (''*'')', @replacechar='*'