4

我有一个 .net 4.0 c# 应用程序,它需要与 mssql 2008 的 odbc 连接。该连接通常运行良好。但是,当我运行一个通常运行几分钟的查询时(不,在项目的这一点上我无法优化查询运行时)我会在 30 秒后超时:

错误 [HYT00] [Microsoft][SQL Server Native Client 10.0]查询超时已过期

我已经尝试更改 odbc 连接的驱动程序(sqlsrv32.dll、sqlncli10.dll、sqlncli11.dll),但我总是遇到类似的错误。

这是我为模拟问题而构建的虚拟代码:

using (
    OdbcConnection conn =
        new OdbcConnection("DSN=d3FA;uid=sa;pwd=1234;MARS_Connection=yes;Connection Timeout=37;"))
{
    conn.ConnectionTimeout = 37;
    conn.Open();

    OdbcCommand myCommand = new OdbcCommand("WAITFOR DELAY '00:00:45'", conn);
    myCommand.ExecuteNonQuery();
}

如您所见,我已经在连接字符串中设置了连接超时,并且还设置了连接的属性。但似乎这个信息(37 秒)只是从查询执行中被忽略了。超时仍会在 30 秒后发生。

从 Microsoft 我得到了 Windows ODBC API 提供SQLSetStmtAttr-Function的信息,这将允许设置 SQL_ATTR_QUERY_TIMEOUT 属性。也许设置这个属性可以解决我的问题 - 但我找不到任何解决方案如何通过.net设置这个值。

结论:有人知道如何增加超时值吗?

4

1 回答 1

13

使用 OdbcCommand 对象的 CommandTimeout 属性,例如

myCommand.CommandTimeout=37;
于 2013-04-16T11:14:50.967 回答