INSERT查询超时到期

时间:2009-03-19 14:44:00

标签: vb.net sql-server-2005

我试图在事务中使用简单的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查询都运行得很好。

谁能告诉我原因?

2 个答案:

答案 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='*'