Using MySQLConnection in C# does not close properly

后端 未结 4 666
我在风中等你
我在风中等你 2020-12-01 18:15

Final solution:

The connection was added to the connection pool. So I closed it, but it still remained physically open. With the ConnectionString Parameter \"Pooli

相关标签:
4条回答
  • 2020-12-01 18:42

    According to the mysql docs, the MySQLConnection is not closed when it goes out of scope. Therefore you must not use it inside a using.

    Quote... "If the MySqlConnection goes out of scope, it is not closed. Therefore, you must explicitly close the connection by calling MySqlConnection.Close or MySqlConnection.Dispose."

    0 讨论(0)
  • You need to wrap the Command and the DataReader in using statements as well.

    0 讨论(0)
  • 2020-12-01 18:57

    Im unsure about mysqlconnection but the sql server counter part uses Connection pooling and does not close when you call close instead it puts it in the connection pool!

    Edit: Make sure you dispose the Reader, Command, and Connection object!

    Edit: Solved with the ConnectionString Parameter "Pooling=false" or the static methods MySqlConnection.ClearPool(connection) and MySqlConnection.ClearAllPools()

    0 讨论(0)
  • 2020-12-01 18:57

    Have a look at using something like this:

    private static IEnumerable<IDataRecord> SqlRetrieve(
        string ConnectionString, 
        string StoredProcName,
        Action<SqlCommand> AddParameters)
    {
        using (var cn = new SqlConnection(ConnectionString))
        using (var cmd = new SqlCommand(StoredProcName, cn))
        {
            cn.Open();
            cmd.CommandType = CommandType.StoredProcedure;
    
            if (AddParameters != null)
            {
                AddParameters(cmd);
            }
    
            using (var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                while (rdr.Read())
                    yield return rdr;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题