1

我只在我的应用程序中使用 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())有人可以确认吗?

4

3 回答 3

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().

于 2012-04-28T10:32:51.107 回答
1

您可以在 while 循环内编写查询,但请确保您不应该使用外部循环使用的资源。

于 2012-04-28T10:26:35.837 回答
1

如果您想同时打开一些阅读器,那么您应该为每个阅读器打开一些新的连接。创建的连接可以在读卡器关闭后再次使用。

于 2012-04-28T10:52:58.113 回答