C#和#x2B;MySQL-已经有一个与此连接关联的开放数据读取器
我阅读了我在这里和网上看到的关于这个主题的每一篇文章,但仍然无法理解这一点,因为我遇到的问题不是读者本身,而是用户“要求程序再次使用读者”,我将尽可能缩小这个问题C#和#x2B;MySQL-已经有一个与此连接关联的开放数据读取器,c#,mysql,.net,C#,Mysql,.net,我阅读了我在这里和网上看到的关于这个主题的每一篇文章,但仍然无法理解这一点,因为我遇到的问题不是读者本身,而是用户“要求程序再次使用读者”,我将尽可能缩小这个问题 我的程序能够正确连接、插入、更新和读取,但问题是,当用户在不退出应用程序的情况下再次尝试读取(在生产环境中肯定会发生这种情况)时,程序会意识到已经有一个与此连接相关联的打开的DataReader。 var candidateReader = daoMySql.GetMySqlDataReader(query); //a breakpo
我的程序能够正确连接、插入、更新和读取,但问题是,当用户在不退出应用程序的情况下再次尝试读取(在生产环境中肯定会发生这种情况)时,程序会意识到已经有一个与此连接相关联的打开的DataReader。
var candidateReader = daoMySql.GetMySqlDataReader(query); //a breakpoint on this line showed that the error is here, when it executes again
candidateReader.Read();
我实际上是在使用它之后关闭连接,使用
candidatoReader.Close();
但出于某种原因,它似乎并没有真正关闭它(?)
我怎样才能解决这个问题?我在这里看不到什么
编辑:
如果我尝试使用相同的DataReader进行读取,在我关闭它之后,我得到的错误是
当读卡器关闭时尝试读取无效
这是有意义的,我不明白的是为什么它会产生原始错误,但我开始意识到问题可能在于,该方法是静态的,并且在静态类中,我将尝试更改它,以便我可以实例化一个类,并使用该方法查看问题是否仍然存在
更新:我尝试了我在上一次编辑中解释的内容,但没有成功,这就是GetMySQLDataReader(字符串查询)
所做的
internal MySqlDataReader GetMySQLDataReader(string query)
{
var cmd = new MySqlCommand(query, Connection);
return cmd.ExecuteReader();
}
GetMySQLDataReader
使用的连接始终是相同的
更新:
我发现了错误所在,有另一个方法返回了reader.HasRows
,它没有关闭DataReader,修复了这个问题,现在它工作正常,长话短说。如果其他人有此问题,请检查是否没有其他DataReader保持打开状态 你能分享更多的代码来尝试使用相同的数据阅读器两次吗?嗨@ChetanRanpariya请检查上次的更新,我刚刚修复了它。