2011-03-03 42 views
4

我正在使用ODBC連接到Sybase數據庫。問題是即使在作用域完成後連接也沒有關閉,並且當我運行sp_who時,我發現數據庫中有大約200個連接打開。我試圖啓用連接池,但這也沒有幫助。如何關閉.NET ODBC連接?

using(var connection = GetOdbcConnection()) 
    { 
     connection.Open(); 
     using (var cmd = new OdbcCommand(query, connection)) 
     { 
      var reader = cmd.ExecuteReader(); 
      if (reader.Read()) 
      { 
       long textLen = reader.GetChars(0, 0, null, 0, 0); 
      } 
      reader.Close(); 
     } 
    } 

我使用的連接字符串是value="Driver={Adaptive Server Enterprise};app=xxx;server=xxxx;port=xxxx; db=xxx;uid=xxx;pwd=xxxx;textsize=2097152"

更新:

public static OdbcConnection GetOdbcConnection() { 
    string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString(); 
    return new OdbcConnection(connectionString); 
} 
+0

GetOdbcConnection是做什麼的? – Bobby 2011-03-03 08:53:32

+0

public static OdbcConnection GetOdbcConnection() string connectionString = ConfigurationManager.AppSettings [「ConnectionString」]。ToString(); 返回新的OdbcConnection(connectionString); } – 2011-03-03 09:00:21

回答

3

你試過connection.Close()

using(var connection = GetOdbcConnection()) 
    { 
     connection.Open(); 
     using (var cmd = new OdbcCommand(query, connection)) 
     { 
      var reader = cmd.ExecuteReader(); 
      if (reader.Read()) 
      { 
       long textLen = reader.GetChars(0, 0, null, 0, 0); 

      } 
      reader.Close(); 
     }    
     // Close the connection 
     connection.Close(); 
    } 
+5

通常這不應該成爲問題,因爲'Close'和'Dispose'在'OdbcConnection'-Object中是同義詞。它應該在'using'範圍的末尾自動調用。 – Bobby 2011-03-03 08:55:05

+0

yes嘗試了這一點,但它沒有幫助 – 2011-03-03 08:56:01

+1

然後,也許有其他方法打開連接但不使用using語句並忘記明確調用.Close()。正如鮑比所說,使用應該關閉連接。 – Peter 2011-03-03 08:58:53

0

嘗試將嘗試.. catch和finally ...

在最後明確檢查connection.state沒有關閉..關閉它..

+0

轉換using語句由編譯器將其與try/finally語句完全相同的IL。 – 2011-03-03 09:30:14

+0

是的正確,但編譯器不會自動關閉連接... – sajoshi 2011-03-03 10:20:34

0

連接到數據庫將當using塊結束時自動關閉。你根本不需要做任何事情。

+1

nope不幫助,我仍然可以看到連接後,當我運行sp_who活動 – 2011-03-03 08:58:11

0

我不確定,但我認爲GetOdbcConnection函數是罪魁禍首。嘗試此功能的修改版本。

private static OdbcConnection _Connection; 
public static OdbcConnection GetOdbcConnection() { 
    string connectionString = 
     ConfigurationManager.AppSettings["ConnectionString"].ToString(); 
    _Connection = new OdbcConnection(connectionString); 
    return _Connection; 
}