ODBC代码仅在启用“连接池”时有效

时间:2012-04-24 07:49:22

标签: c# odbc

我正在使用以下代码模式使用ODBC在第三方数据库上运行某些查询。

如果我使用ODBC数据源管理员手动启用连接池,则一切正常。

问题是如果禁用连接池,则在第二次数据库调用时出现ODBC连接错误。

基本上,我想避免在客户计算机上启用连接池的部署麻烦(除非有一些简单的方法)。

以下ODBC代码有问题吗?

using (var conn = GetODBCConnection())
{
     using (var sdr = new OdbcCommand("SELECT * FROM [TABLE]", conn).ExecuteReader())
     {
         while (sdr.Read())
         {
             // use data
         }
     }
}

private OdbcConnection GetGenieConnection()
{
    var conn = new OdbcConnection(_connString);

    conn.Open();

    return conn;
}

PS:我正在使用4D v12 ODBC驱动程序。我调查了连接字符串选项以打开连接池但找不到任何内容。

编辑:这种行为可能与线程有关吗?我在BackgroundWorker线程中调用第一个ODBC数据库调用。如果我在一个线程中调用所有内容,它似乎有效。这可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

如果任何其他可怜的灵魂在这里结束,我的解决方案是:

  1. 在流程的生命周期内保持静态连接“打开”。
  2. 使用此单例实例进行所有数据库调用。
  3. 使用锁定确保一次只运行一个ODBC调用。
  4. 就性能而言,这不是一个理想的解决方案,但它确实有效。