Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c关闭打开的连接#_C#_Asp.net_C# 4.0 - Fatal编程技术网

C# 使用c关闭打开的连接#

C# 使用c关闭打开的连接#,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我在一个类文件中使用下面的代码,并访问此函数以打开连接,它返回true。我想关闭此连接状态。我无法执行此操作。请帮我做这个 common.cs ========= public static bool DBConnectionStatus() { try { string conString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|Dat

我在一个类文件中使用下面的代码,并访问此函数以打开连接,它返回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)
            {
            }
        }

using
语句被翻译成三个部分:获取、使用和处置

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

更多信息请访问。

您最好返回一个打开的连接,因为您需要在OLEDB命令中使用该连接。如果愿意,也可以在公共类中隐藏连接,但如果将其保留在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)
     {
     }
}

在当前代码中,由于使用语句,连接被关闭并释放。将conn带到类的memberfield,或让DbConnectionStatus返回连接。@user2110618每次需要访问数据库时,我建议您使用
using
,而不是检查连接状态。嗯,因此它返回true以指示连接已打开/可打开?当函数返回时,连接关闭。'某些操作“如OP所示”不需要打开连接?@rene我认为OP只是在测试,这就是为什么我建议他使用
只使用
语句,而不是从函数中获取状态。我希望当维护人员介入时,这些知识能够保存下来:-)