最近用C# WinForm寫連接MySql的程式,
因為有一個表資料量比較大,
我使用 adapter.Fill(dt) 的方式讀取資料,
結果發生了以下的例外,
但不是每次都會發生,
Fatal error encountered during data read. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Reading from the stream has failed. ---> System.IO.EndOfStreamException: 嘗試讀取超出資料流末端的資料。
想問一下通常什麼情況會發生這樣的錯誤,
網路上好像都找不到解答,
不知道有沒有高手能幫忙解惑一下呢?
感恩~
可以看這裡 MySQL Bugs: #86056: MySqlException (0x80004005): Reading from the stream has failed.
因為在大量資料讀取資料 + 導致I/O延遲增加
這時候又有多個連線在處理導致此錯誤
1.此查詢SQL不能限制資料數量嗎?
假如到萬級資料以上建議寫SQL Script來解決(如分頁)
2.fill也可以使用限制範圍的方法來限制資料數量(如圖片)Fill(DataSet, Int32, Int32, String) | 加入或重新整理指定範圍中的資料列 DataSet 以符合在資料來源使用 DataSet 和 DataTable 名稱。
PS.
就算使用fill+rangeindex
看原始碼它還是用dataReader去跟資料庫讀完資料了(如圖)
所以建議使用SQL + 分頁
假如有錯誤、問題可以跟我說 :-)
他是連MySQL資料庫~出現的問題@@..
可能要用MySQL專用的分頁語法~
大大,是的
因為要處理計算的資料,
所以需要載入,
而且客戶要的資料是千萬等級的 @@
而且客戶要的資料是千萬等級的 @@
1.記憶體夠多撈一次後把資料放在一個static集合裡面
其他方法從它撈取資料處理,速度快,又避免重複從DB撈資料
2.C#想辦法分批處理方式
或是寫SP在DB解決完