-2

我在类文件中使用以下代码并访问此函数以打开返回 true 的连接。我想关闭这个连接状态。我不能这样做。请帮我这样做。

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)
            {
            }
        }
4

2 回答 2

1

一份using声明被翻译成三个部分:获取、使用和处置。

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

更多信息见 MSDN 文章

于 2013-03-10T11:30:06.167 回答
0

您最好返回一个打开的连接,因为您需要在 OleDbCommand 中使用它。如果您愿意,您也可以在 Common 类中隐藏连接,但是如果您将其保留在 using 语句中,则在获得状态时没有打开的连接,所以基本上如果返回 true,您的连接实际上是关闭的(并且已释放)。重构为这样的东西:

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)
     {
     }
}
于 2013-03-10T11:43:01.467 回答