導入excel數據時候的問題

            大家都知道,在asp.net下如果需要導入excel表格中的數據時,我們都是先把excel文件上傳到服務器,然後讀取數據並寫入數據庫中。這個似乎很簡單,但是在讀取excel文件中的數據時。

          

public static DataTable GetExcelTable(string Path,string sheet)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
            DataTable dt = new DataTable();
            try
            {
                using (OleDbConnection conn = new OleDbConnection(string.Format(strConn, Path)))
                {
                    conn.Open();
                    OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [" + sheet + "$]", conn);
                    DataSet ds = new DataSet();
                    myCommand.Fill(ds, "table1");
                    dt = ds.Tables[0];
                }
                return dt;
            }
            catch (Exception e)
            {

                throw e;
            }
        }

看似簡單的代碼,有時候卻容易出問題。具體一點說,就是在64位的操作系統上,因爲微軟的驅動都是32位程序,64位好像沒有了。

系統往往提示:The 'Microsoft.ACE.OLEDB.14.0' provider is not registered on the local machine 導入數據庫錯誤

如果是IIS7解決起來就簡單,應用程序池中有個高級設置, 啓用32位程序即可。

而IIS6卻沒有這個,只能通過命令行,執行以下語句。

cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
這個其實就是讓系統能運行32位程序;然後就是把IIS重新啓動一下,同樣是命令行,運行 IISRESET

這個時候再IIS6的管理頁面,你就發現,擴展服務多去一個32bit服務,允許即可

再執行一下IISRESET,然後訪問頁面,重新執行導入就可以了

還有注意一點就是asp.net程序發佈編譯的時候,platform target 選X86

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章