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

在c#中为OdbcConnection(System.Data.Odbc)设置ConnectionTimeout不起作用,c#,.net,sql-server,timeout,odbc,C#,.net,Sql Server,Timeout,Odbc,我有一个.net 4.0 c#应用程序,它需要一个到mssql 2008的odbc连接。这种连接通常工作得很好。但是,当我运行一个通常运行几分钟的查询时(不,在项目中的这一点上,我无法优化查询运行时),我将在30秒后得到一个超时: 错误[HYT00][Microsoft][SQL Server本机客户端10.0]查询超时 过期 我已经尝试更改odbc连接的驱动程序(sqlsrv32.dll、sqlncli10.dll、sqlncli11.dll),但我总是遇到类似的错误 这是我为模拟问题而构建的

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

错误[HYT00][Microsoft][SQL Server本机客户端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提供的信息,该API允许设置SQL\u ATTR\u QUERY\u TIMEOUT属性。也许设置这个属性可以解决我的问题——但我找不到任何解决方案,如何通过.net设置这个值


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

使用OdbcCommand对象的CommandTimeout属性,如

myCommand.CommandTimeout=37;

如果数据库连接字符串有效,则不会应用连接超时,因为ODBC将连接到数据库。如果您希望命令生成错误,请查看CommandTimeout。这是一个单独的问题。aaaaahhh…如此简单的解决方案。谢谢你,fanisch,对我来说,这正是正确的解决方案!如果连接本身挂起open(),则没有帮助在open()挂起的情况下,该命令如何执行才能有机会超时?@CRice-连接“挂起open”正是用于
ConnectionTimeout
的。这个问答是关于一个不同的情况。(OP感到困惑,并且错误地使用了
ConnectionTimeout
,认为这会影响他的查询超时。)