2010-03-30 85 views
7

我正在從一個C#控制檯程序獲取大量記錄,通過醫療石斑魚運行它們,然後更新每個記錄。它使用MySQL Connector/NET 5.2.7。它的工作方式是使用SQL_BUFFER_RESULT來一次抓取大量數據(即20,000行)以避免鎖定。每條記錄都通過石斑魚運行,然後在該記錄上完成單獨的更新查詢。有兩個連接使用,一個讀連接和一個寫連接。MySQL異常 - 在數據讀取期間遇到致命錯誤

所以當程序執行時,它通過讀取查詢中的記錄進行循環,它使用result.Read()來執行此操作,其中結果是MySqlDataReader。結果.Read調用是拋出異常的地方。它隨機發生(不在相同的記錄或任何東西)。一旦在第一條記錄上遇到它,它也會在數據讀取器的每個後續讀取調用中遇到。我嘗試了很多東西,並且搜索了其他人有的相關問題。任何見解都會很棒,並隨時讓我知道我需要提供哪些其他信息。

+0

那是什麼拋出的異常? – 2010-09-16 19:37:57

回答

11

between connection.Open();和command.ExecuteNonQuery();我只是添加了兩行這樣的:

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(); 

問題已解決:)

+0

這似乎也幫助了我,但有沒有另一種/更好的方式來永久設置這些超時(在Windows安裝),而不是在每個'connection.Open()'後執行一個像這樣的命令。 – 2016-08-03 18:30:14

0

我有.NET連接器類似的問題。錯誤可能與速度有關--C#可能試圖比MySQL更快地處理數據。我最終需要做兩件事來彌補 - 1.當發生錯誤時(或者在處理大段後)添加睡眠定時器,以便系統可以「呼吸」或者2.嘗試再次讀取。

0

我相信在讀取大型數據集時,.NET連接器會存在緩衝區大小限制。我通過一次讀取5000條記錄來解決這個問題。

相關問題