iT邦幫忙

0

[MySql] 嘗試讀取超出資料流末端的資料

最近用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: 嘗試讀取超出資料流末端的資料。

想問一下通常什麼情況會發生這樣的錯誤,
網路上好像都找不到解答,
不知道有沒有高手能幫忙解惑一下呢?
感恩~
/images/emoticon/emoticon41.gif/images/emoticon/emoticon41.gif

1 個回答

1
暐翰
iT邦大師 1 級 ‧ 2018-06-11 21:33:39

可以看這裡 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專用的分頁語法~

暐翰 iT邦大師 1 級 ‧ 2018-06-11 22:58:53 檢舉

大大,是的

小魚 iT邦高手 1 級 ‧ 2018-06-11 23:09:40 檢舉

因為要處理計算的資料,
所以需要載入,
而且客戶要的資料是千萬等級的 @@

暐翰 iT邦大師 1 級 ‧ 2018-06-11 23:11:17 檢舉

而且客戶要的資料是千萬等級的 @@

1.記憶體夠多撈一次後把資料放在一個static集合裡面
其他方法從它撈取資料處理,速度快,又避免重複從DB撈資料

2.C#想辦法分批處理方式
或是寫SP在DB解決完

小魚 iT邦高手 1 級 ‧ 2018-06-11 23:21:30 檢舉

寫SP在DB解決完

這有困難...
有點麻煩的,
跟一般資料處理方式不大一樣,
比較屬於數學的範圍,
資料是要一直計算一直更新的,
如果完全放在記憶體處理又怕記憶體會爆 @@

暐翰 iT邦大師 1 級 ‧ 2018-06-11 23:24:53 檢舉

有範例資料跟邏輯嗎
可以幫忙想怎麼解決

小魚 iT邦高手 1 級 ‧ 2018-06-11 23:36:18 檢舉

沒關係,
基本上是解決,
只是一直沒辦法結案...
這次有個心得,
以後老人家的案子最好不要接...

我要發表回答

立即登入回答