解決方法of未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程序


在開發的一個報表轉換功能涉及到Excel97-2003(.xls)文件的導入。使用oledb來讀取excel數據。代碼為:

public static DataSet LoadDataFromExcel(string filePath, string[] sheetNames)
{
    string strConn;
    //  strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";  
    //strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=No\"";  //這是2010的鏈接字符串,不同版本鏈接不同
    strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
    OleDbConnection OleConn = new OleDbConnection(strConn);
    OleConn.Open();
    DataSet OleDsExcle = new DataSet();
    foreach (string name in sheetNames)
    {
        string sql = "SELECT * FROM [" + name + "$]";
        OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
        OleDaExcel.Fill(OleDsExcle, name);
    }
    OleConn.Close();
    return OleDsExcle;
}

我使用的IDE是vs2013,OS是win7 64位,調試程序時報異常:

“System.InvalidOperationException”類型的未經處理的異常在 System.Data.dll 中發生

其他信息: 未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程序。

 

解決方法為:

在項目屬性的“生成“里,將目標平台由默認的Any CPU改為x86

 

ps: 對於web網站,excel導入用OLEDB同樣會報錯:未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程序

這時,需要修改app pool的設置。“應用程序池默認屬性”/“常規”/”啟用32位應用程序”,設置為 true。

 

 

看來,使用OLEDB還是要付出代價的,呵呵。 使用NPOI則不需要任何設置哦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM