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

4

2 回答 2

1

我解决了这个问题。我不知道我不能多次使用同一个连接来调用不同的读者,所以我每次需要查询数据库时都必须创建一个新的。

MySQL - 多个结果集

于 2013-04-10T13:40:11.623 回答
0

ExecuteAction行得通吗?你甚至在使用那个代码吗?UpdateRecords有明显的问题。如果您查看ExecuteAction它会打开连接,然后在using语句中声明阅读器。之后,它关闭连接。在UpdateRecords您没有代码来处理打开/关闭连接时,您也缺少处理阅读器的代码。因此,您的代码有时可能会工作(例如,如果连接已经在其他地方打开)并且有时会失败(如果尚未建立连接)。

于 2013-04-08T23:30:24.600 回答