无效的读取尝试-可能使用操作
本文关键字:操作 读取 无效 | 更新日期: 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
中,你没有代码来处理打开/关闭连接,你也缺少代码来处理读取器。因此,您的代码有时可能工作(例如,如果连接已经在其他地方打开),而在其他时候(在连接尚未建立的情况下)将失败。