无效的读取尝试-可能使用操作

本文关键字:操作 读取 无效 | 更新日期: 2023-09-27 18:08:02

public void ExecuteAction(MySqlCommand query, Action<MySqlDataReader> action)
    {
        _connection.Open();
        query.Connection = _connection;
        using(var reader = query.ExecuteReader())
        {
            while (reader.Read())
            {
                action(reader);
            }
            reader.Close();
        }
        _connection.Close();
    }

有可能这样做吗?我总是得到错误"无效尝试读取时,阅读器已关闭"。

这是我正在使用的一段代码:

private void UpdateRecords()
    {
        var query = String.Format("SELECT * FROM {0}", _table);
        var cmd = new MySqlCommand(query);
        _db.ExecuteAction(cmd, reader =>
                                   {
                                       var rows = new List<object>();
                                       for (var i = 0; i < reader.FieldCount; i++)
                                       {
                                           if (reader.IsDBNull(i)) continue;
                                           var name = reader.GetName(i);
                                           if (!_fields.Contains(name)) _fields.Add(name);
                                           rows.Add(reader.GetValue(i));
                                       }
                                       _records.Add(new Record(_fields, rows));
                                   });
    }

我试图将数据库表的所有记录存储到程序内的动态类中。当我尝试将动态mysql数据添加到这些类中时,我得到这个错误。

另一个相关的问题:有没有库可以为我做这个?有很多代码我不需要写下来,但这是我第一次接触MySQL和c#,所以我没有任何知识。谢谢你的帮助。

更新:现在我得到连接已经打开的错误,MySQL使我诅咒(我习惯了MongoDB…)

无效的读取尝试-可能使用操作

我解决了这个问题。我不知道我不能使用多个相同的连接来调用不同的reader,所以我必须在每次需要查询db时创建一个新的连接。

MySQL -多结果集

ExecuteAction工作吗?你在用那个代码吗?UpdateRecords存在明显的问题。如果您查看ExecuteAction,它打开连接,然后在using语句中声明阅读器。然后关闭连接。在UpdateRecords中,你没有代码来处理打开/关闭连接,你也缺少代码来处理读取器。因此,您的代码有时可能工作(例如,如果连接已经在其他地方打开),而在其他时候(在连接尚未建立的情况下)将失败。