gpt4 book ai didi

c# - 在 C# 中使用 MySQLConnection 无法正常关闭

转载 作者:可可西里 更新时间:2023-11-01 03:08:16 25 4
gpt4 key购买 nike

我尝试编写一个类来简化 MySql 连接。我的问题是,在我打开一个连接并关闭它之后。它仍然在数据库中打开并被中止。

当然,我正在使用“using”语句,但连接仍然打开,并在我退出程序后中止。

这是我的代码:

using (DatabaseManager db = new DatabaseManager())
{
using (MySqlDataReader result = db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
foreach (MySqlDataReader result in db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
//Do stuff here
}
}
}

类数据库管理器打开连接并在处理时关闭它:

public DatabaseManager()
{
this.connectionString = new MySqlConnectionStringBuilder("Server=localhost;Database=businessplan;Uid=root;");
connect();
}
private bool connect()
{
bool returnValue = true;
connection = new MySqlConnection(connectionString.GetConnectionString(false));
connection.Open();
}

public void Dispose()
{
Dispose(true);
}

public void Dispose(bool disposing)
{
if (disposing)
{
if (connection.State == System.Data.ConnectionState.Open)
{
connection.Close();
connection.Dispose();
}
}
//GC.SuppressFinalize(this);//Updated
}
//Updated
//~DatabaseManager()
//{
// Dispose(false);
//}

因此,我在调试器中对其进行了检查,Dispose() 方法被调用并正确执行。我错过了什么?是不是我做错了什么或误解了什么?

以防万一,DataReader() 方法(更新版本):

public IEnumerable<IDataReader> DataReader(String query)
{
using (MySqlCommand com = new MySqlCommand())
{
com.Connection = connection;
com.CommandText = query;
using (MySqlDataReader result = com.ExecuteReader(System.Data.CommandBehavior.CloseConnection))
{
while (result.Read())
{
yield return (IDataReader)result;
}
}
}
}

好的,我尝试使用 yield 返回:

foreach (MySqlDataReader result in db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
//...
}

然后我更改了 DataReader 方法:

public IEnumerable<IDataReader> DataReader(String query)
{
using (MySqlCommand com = new MySqlCommand())
{
com.Connection = connection;
com.CommandText = query;
using (MySqlDataReader result = com.ExecuteReader())
{
while (result.Read())
{
yield return (IDataReader)result;
}
}
}
}

它以我可以检索数据的方式工作,但我仍然遇到同样的问题:连接未正确关闭。

最佳答案

我不确定 mysqlconnection 但 sql server 计数器部分使用连接池并且在您调用关闭时不会关闭而是将其放入连接池中!

编辑:确保释放 Reader、Command 和 Connection 对象!

编辑:使用 ConnectionString 参数“Pooling=false”或静态方法 MySqlConnection.ClearPool(connection) 和 MySqlConnection.ClearAllPools() 解决

关于c# - 在 C# 中使用 MySQLConnection 无法正常关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com