iT邦幫忙

0

C# 查詢Excel時遺失資料

Ray 2021-08-30 16:40:31424 瀏覽

近日練習以Excel當作資料庫的方式操作,遇到一些問題爬文無解,故來向前輩求教...

方式:
透過OleDbConnection讀取、寫入Excel表格

程式目的:
比對兩個工作簿的資料,並依據設定條件,輸出資料到新的工作簿中

code:

try
            {
                OleDbConnection con = new OleDbConnection(constr);
                con.Open();
                OleDbCommand cmd = new OleDbCommand
                {
                    CommandText = sql,
                    Connection = con
                };
                
                string s = cmd.ExecuteScalar() == null ? "" : cmd.ExecuteScalar().ToString();
                //if(con.State==ConnectionState.Open) con.Close();con.Dispose();
                
                return s;
            }
            catch
            {
            }

過程中發現,若在讀取完資料後將con關閉,執行時間會變得很慢(約10分鐘),但輸出資料正確;
不關閉con,則會產生兩種結果:

  • 正常執行,所有資料都輸出,執行時間約30s
    -示意圖
    https://ithelp.ithome.com.tw/upload/images/20210830/20129652ncOMd6EaO2.png
  • 執行錯誤,僅輸出部分資料,執行時間約20s
    -示意圖
    https://ithelp.ithome.com.tw/upload/images/20210830/20129652xtEKtY4ERC.png

想請問為何會有此種情形發生,以及如何解決?

jack8900 iT邦新手 4 級 ‧ 2021-08-30 16:56:04 檢舉
使用EPPLUS對於EXCEL的操作會快很多,也有人會使用NPOI,但是我自己是比較喜歡前者
Ray iT邦新手 5 級 ‧ 2021-08-31 09:06:26 檢舉
感謝回復,有空來找找方法
用python + openpyxl + xlsx 跑起來更快....(還不用編譯)

epplus或openpyxl 都只支援open document的excel檔 (副檔名是xlsx)

尚未有邦友回答

立即登入回答