我只在我的应用程序中使用DataReaders两次,看起来像这样
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.Read())任何人都可以在此确认吗?
答案 0 :(得分:3)
这几乎可以肯定意味着您在多个命令对象之间共享连接对象。您应该避免这样做(除非它们都涉及单个数据库事务)。
您应该遵循的模型一般是:
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()
。
答案 1 :(得分:1)
您可以在while循环中编写查询,但请确保不要使用外部循环使用的资源。
答案 2 :(得分:1)
如果你想同时打开一些读者,那么你应该为每个读者打开一些新的连接。读取器关闭后,可以再次使用创建的连接。