2013-03-10 103 views
-2

我在類文件中使用下面的代碼並訪問這個函數打開連接,它返回true。我想關閉這個連接狀態,我不能這樣做。請幫我做到這一點。用c關閉打開連接#

common.cs 
========= 
public static bool DBConnectionStatus() 
     { 
      try 
      { 
       string conString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|db_gym.mdb; Jet OLEDB:Database Password=gym_admin"; 
       using (OleDbConnection conn = new OleDbConnection(conString)) 
       { 
        conn.Open(); 
        return (conn.State == ConnectionState.Open); 
       } 
      } 
      catch (OleDbException) 
      { 
       return false; 
      } 
      catch (Exception) 
      { 
       return false; 
      } 
     } 


protected void btn_general_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       bool state = common.DBConnectionStatus(); 
       if(state == true) 
       { 
       // Some operation 
       } 
       // I want to close this connection 

      } 
      catch (Exception e1) 
      { 
      } 
     } 
+0

在您當前的代碼中,連接因爲使用語句而關閉和處置。將conn帶入該類的成員字段或讓DbConnectionStatus返回連接。 – rene 2013-03-10 11:33:35

回答

1

A using陳述被翻譯成三部分:採集,使用和處理。

using (OleDbConnection conn = new OleDbConnection(conString)) 
    { 
     conn.Open(); 
     return (conn.State == ConnectionState.Open); 
    //connection is automatically closed and disposed here 
    } 

更多信息請致電MSDN article

+0

所以我不需要關閉。對吧? – user2110618 2013-03-10 11:33:29

+0

@ user2110618絕對正確.. :) – 2013-03-10 11:35:07

+0

非常感謝你.. – user2110618 2013-03-10 11:37:13

0

你最好回饋一個開放的連接,因爲你需要在OleDbCommand中。如果你喜歡,你也可以在Common類中隱藏連接,但是如果你保留在using語句中,當你獲得狀態時沒有開放連接,所以基本上如果返回true,你的連接實際上被關閉(和Disposed)。重構到這樣的事情:

public OleDbConnection GetOpenConnection() 
{ 
    string conString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|db_gym.mdb; Jet OLEDB:Database Password=gym_admin"; 
    OleDbConnection conn = new OleDbConnection(conString)) 
    conn.Open(); 
    return conn; 
} 


protected void btn_general_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     using(OleDbConnection openConnection = common.GetOpenConnection()) 
     { 
      // I want to close this connection 
      openConnection.Close(); // close asap 
     } // dispose 
    } 
    catch (Exception e1) 
    { 
    } 
}