11

私は、テーブルから多数のレコードを取得し、それらを医療グループで実行してから、各レコードを更新するC#コンソールプログラムに取り組んでいます。MySQL Connector /NET5.2.7を使用します。それが機能する方法は、ロックを回避するためにSQL_BUFFER_RESULTを使用して一度にデータのチャンク(つまり20,000行)を取得することです。各レコードはグルーパーを介して実行され、次にその1つのレコードに対して個別の更新クエリが実行されます。使用される接続には、読み取り接続と書き込み接続の2つがあります。

したがって、プログラムが実行され、読み取りクエリからのレコードをループすると、result.Read()を使用してループします。ここで、resultはMySqlDataReaderです。result.Read呼び出しは、例外がスローされる場所です。それはランダムに発生します(同じレコードなどではありません)。最初のレコードで検出されると、データリーダーの後続のすべての読み取り呼び出しでも検出されます。私は多くのことを試し、他の人が抱えている関連する問題を高低で検索しました。どんな洞察も素晴らしいでしょう、そして私が提供する必要がある他のどんな情報を私に知らせてください。

4

4 に答える 4

17

connection.Open();の間 およびcommand.ExecuteNonQuery(); 次のように2行追加しました。

connection.Open();

MySqlCommand cmd = new MySqlCommand("set net_write_timeout=99999; set net_read_timeout=99999", connection); // Setting tiimeout on mysqlServer
cmd.ExecuteNonQuery();

int numOfRecordsUpdated = command.ExecuteNonQuery();

問題が修正されました:)

于 2011-07-12T19:16:32.730 に答える
1

大規模なデータセットを読み取る場合、.NETコネクタにはバッファサイズの制約があると思います。私は一度に5000レコードを読み取ることで、この問題を回避しました。

于 2011-01-26T16:14:41.403 に答える
0

.NET コネクタで同様の問題が発生しました。エラーは速度に関連している可能性があります。C# は、MySQL が追いつかない速度でデータを処理しようとしている可能性があります。1.エラーが発生したとき(または大きなセクションを処理した後)にスリープタイマーを追加して、システムが「呼吸」できるようにするか、または2.再度読み取りを試みます。

于 2010-11-15T19:42:13.053 に答える