0

我正在使用以下代码模式使用 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 数据库调用。如果我在一个线程中调用所有内容,它似乎可以工作。这可以解释吗?

4

1 回答 1

2

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

  1. 在进程的生命周期内保持静态连接“打开”。
  2. 使用这个单例实例进行我所有的数据库调用。
  3. 使用锁确保一次只运行一个 ODBC 调用。

就性能而言,这不是一个理想的解决方案,但它确实有效。

于 2012-04-27T06:25:19.710 回答