2017-09-25 135 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

相關問題