2017-09-25 136 views
0

我不太确定我是否遇到错误,或者我没有弄清它应该如何工作。所以最近我一直试图解决这个异常MySql.Data.MySqlClient.MySqlException: 'There is already an open DataReader associated with this Connection which must be closed first.',我开始了一个调试会话,看看发生了什么。我看到的并不完全在我脑海中计算(见附件截图)。在读取器上调用Close()后,MySqlDataReader不会关闭

在我致电reader.Close()后,IsClosed属性保持为false,并且重复调用.Close()(在直接窗口中)不会改变该属性。

这是预期的行为,我的问题是在别的地方,或者这是一个错误和异常的原因?

在使用MySql.Data v6.10.3-rc(来自nuget.org)时,会发生这种情况,它是目前唯一支持.NET标准的版本。此外,代码被编译为.NET Core 2.0应用程序。

UPD:有一些任务,但读者只能从主线程工作。另外,reader被宣告为DbDataReader,从中继承MySqlDataReader

UPD2:显然,如果我打电话给((MySql.Data.MySqlClient.MySqlDataReader)reader).Close(),那么阅读器会正常关闭。在我看来,就像连接器中的一个错误,以及他们如何使用虚拟方法。对?

Debugger session

+1

你是否在一个异步任务? – apomene

+0

@apomene Nope,任务外,正常的单线程代码。有任务,但他们没有处理读者,只有从读者的数据。 – bazzilic

+1

如果您调用'reader.Dispose()',会发生什么?它是否被处置? – waka

回答

0

确保你总是使用using子句中所有读者。我在使用子句中使用每个阅读器和连接对象,并且没有发现任何错误或不关闭。我没有看到许多方法可能会出现问题using条款。

+0

MySqlDataReader实现中存在一个错误,它们不会覆盖该方法,因此虚拟调用会解析为DbDatReader的空实现。 – bazzilic

+0

我刚刚注意到你谈到了使用v6.x,因为只有标准支持。我目前使用8.0.8-dmr,它工作正常。还有一个更新的版本,以及如果你想尝试 –

+0

即使在阅读文档后,我仍然没有得到6.x和8.x连接器之间的区别。 – bazzilic

相关问题