0

次のコードパターンを使用して、ODBCを使用してサードパーティのデータベースでいくつかのクエリを実行しています。

ODBCデータソースアドミニストレータを使用して接続プールを手動で有効にすると、すべてが正常に機能します。

問題は、接続プールが無効になっている場合、2回目のデータベース呼び出しで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:4Dv12ODBCドライバーを使用しています。接続プールをオンにする接続文字列オプションを調べましたが、何も見つかりませんでした。

編集:この動作はスレッドと関係がありますか?私はBackgroundWorkerスレッドで最初のODBCデータベース呼び出しを呼び出しています。すべてを1つのスレッドで呼び出すと機能するようです。これは説明できますか?

4

1 に答える 1

2

他の貧しい魂がここにたどり着いた場合、私の解決策は次のとおりでした。

  1. プロセスの存続期間中、静的接続を「開いたまま」にしておきます。
  2. このシングルトンインスタンスを使用して、すべてのデータベース呼び出しを行います。
  3. ロックを使用して、一度に1つのODBC呼び出しのみが実行されていることを確認します。

これは、パフォーマンスの観点からは理想的なソリューションではありませんが、機能します。

于 2012-04-27T06:25:19.710 に答える