2013-03-10 4 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

ответ

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

+0

@ user2110618 Абсолютно верно .. :) –

+0

Большое вам спасибо. – user2110618

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) 
    { 
    } 
} 
Смежные вопросы