2012-04-24 40 views
0

我正在使用以下代碼模式在使用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

如果任何其他可憐的靈魂在這裏結束了,我的解決辦法是:

  1. 離開過程的生命週期靜態連接「開放」。
  2. 使用這個單例實例進行我所有的數據庫調用。
  3. 使用鎖確保一次只有一個ODBC調用正在運行。

這不是一個在性能方面的理想解決方案,但它的工作原理。

相關問題