2017-09-25 7 views
0

バグが発生しているかどうかわからない、または動作しないとわからない。だから私はこの例外を解決しようとしていたMySql.Data.MySqlClient.MySqlException: 'There is already an open DataReader associated with this Connection which must be closed first.'と私は何が起こっているかを見るためにデバッグセッションを開始しました。私が見たものは私の頭ではかなり計算されていません(添付のスクリーンショットを参照)。Reader()でClose()を呼び出した後にMySqlDataReaderが閉じない

reader.Close()を呼び出した後、プロパティIsClosedはfalseのままで、.Close()(直前のウィンドウ内)への繰り返し呼び出しはそれを変更しません。

これは予期された動作で、私の問題は他の場所か、これはバグと例外の原因ですか?

これは.NET標準をサポートする唯一のものであるMySql.Data v6.10.3-rc(nuget.orgから)を使用している場合に発生します。また、このコードは.NET Core 2.0アプリケーションにコンパイルされています。

UPD:周囲にはタスクがありますが、リーダーはメインスレッドのみで作業します。またreaderDbDataReaderと宣言され、MySqlDataReaderが継承されます。

UPD2:明らかに、私が((MySql.Data.MySqlClient.MySqlDataReader)reader).Close()と呼ぶと、読者は正しく閉じます。コネクタにバグがあり、仮想メソッドをどのように使用しているかのように思えます。右?

Debugger session

+1

あなたは非同期タスク内にいますか? – apomene

+0

@apomeneいいえ、タスクの外側では、通常のシングルスレッドコードです。周囲にはタスクがありますが、読者から取り出されたデータだけを読者に対処しません。 – bazzilic

+1

'reader.Dispose()'を呼び出すとどうなりますか?それは処分されますか? – waka

答えて

0

あなたは常にusing句内のすべてのあなたの読者を使用していることを確認してください。私はすべての読者と接続オブジェクトを節を使用して使用しています。 using句で問題が発生する可能性のある方法はたくさんありません。

+0

MySqlDataReaderの実装にバグがあり、メソッドをオーバーライドしないため、仮想呼び出しがDbDatReaderの空の実装に解決されます。 – bazzilic

+0

v6.xは標準でサポートされているだけなので、あなたはv6.xの使用について話していることに気付きました。私は現在8.0.8-dmrを使用していますが、正常に動作します。 –

+0

ドキュメントを読んだ後でも、私はまだ6.xと8.xの違いは分かりません。 – bazzilic

関連する問題