【发布时间】:2017-09-25 14:47:42
【问题描述】:
我不太确定我是否遇到了错误,或者我不明白它应该如何工作。所以最近我一直在尝试解决这个异常MySql.Data.MySqlClient.MySqlException: 'There is already an open DataReader associated with this Connection which must be closed first.',我开始了一个调试会话来看看发生了什么。我所看到的并没有完全在我的脑海中计算出来(参见随附的屏幕截图)。
在我调用reader.Close() 之后,属性IsClosed 保持为假,并且重复调用.Close()(在即时窗口中)不会改变这一点。
这是预期的行为,我的问题在其他地方,还是这是一个错误和异常的原因?
当使用 MySql.Data v6.10.3-rc(来自 nuget.org)时会发生这种情况,这是目前唯一支持 .NET Standard 的。此外,代码被编译为 .NET Core 2.0 应用程序。
UPD:周围有任务,但只能在主线程中使用阅读器。另外,reader 被声明为DbDataReader,MySqlDataReader 是从那里继承而来的。
UPD2:显然,如果我调用((MySql.Data.MySqlClient.MySqlDataReader)reader).Close(),那么阅读器会正常关闭。在我看来,连接器中的错误以及它们如何使用虚拟方法。对吧?
【问题讨论】:
-
你在异步任务中吗??
-
@apomene 不,在任务之外,正常的单线程代码。周围有一些任务,但它们不处理阅读器,只处理从阅读器获取的数据。
-
如果你打电话给
reader.Dispose()会发生什么?它会被处理掉吗? -
@waka 没有任何反应。但是,如果我这样做:
((MySql.Data.MySqlClient.MySqlDataReader)reader).Close(),那么它可以工作。reader在我的代码中被声明为DbDataReader。
标签: mysql .net .net-core mysql-connector mysqldatareader