MySqlException (0x80004005):已经有一个与此连接关联的打开的 DataReader,必须先关闭
本文关键字:DataReader 关联 连接 0x80004005 有一个 MySqlException | 更新日期: 2023-09-27 18:32:26
我在我的应用程序中只使用 DataReader 两次,两次看起来像这样
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//Code
}
reader.Close();
谁能给我一些关于如何解决此错误的指示?或者去哪里看?抱歉,如果它太模糊了,但这就是错误告诉我的。它指出了这一点:
MySqlCommand cmdDel = new MySqlCommand("UPDATE " + _Database + " SET balance=" + balance + ", bitaddress=" + myads + ", lostbalance=" + lostbalance + " WHERE username = '" + username + "'", connection);
cmdDel.ExecuteNonQuery();
cmdDel.Dispose();
我的猜测是,在一段时间内可能不允许执行查询命令(reader。阅读()) 任何人都可以确认这一点吗?
这几乎肯定意味着您在多个命令对象之间共享连接对象。您应该避免这样做(除非它们都涉及单个数据库事务)。
您应该遵循的模型通常是:
using(var connection = new MySqlConnection("..."))
{
using(var cmd = new MySqlCommand("...",connection))
{
//Set up parameters/other settings/as required
connection.Open();
cmd.<Whatever ExecuteXXX method you need to use>();
//If it was ExecuteReader, process the results now
}
}
//If it was ExecuteScalar, or a fill of a DataSet or DataTable, consume the results now
除非您有特定的需要阻止它,否则您应该更愿意将一次性物品包装在 using
语句中,而不是手动调用 Dispose()
。
您可以在 while 循环中编写查询,但请确保不应使用外部循环使用的资源。
如果你想同时打开一些阅读器,那么你应该为每个阅读器打开一些新的连接。创建的连接可以在读取器关闭后再次使用。