在c#中为OdbcConnection(System.Data.Odbc)设置ConnectionTimeout不起作用

时间:2013-04-16 11:06:08

标签: c# .net sql-server timeout odbc

我有一个.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设置这个值。

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

1 个答案:

答案 0 :(得分:8)

使用OdbcCommand对象的CommandTimeout属性,如

myCommand.CommandTimeout=37;