標籤:style blog http color 使用 os io 檔案
asp.net採用OLEDB方式匯入Excel資料時提示:未在本機電腦上註冊"Microsoft.Jet.OLEDB.4.0" 提供者"
筆者在項目中做做了一個從Excel表格中匯入資料的模組、大體上asp.net項目中匯入Excel大體分成三類:
1)採用c#內建方案System.Data.OleDb(限制較小, 通用)
2)採用Excel的COM組件(會有版本問題)
3)採用偽Excel檔案、即使用文字資料流的方式根據需求自己定義資料格式。同時在服務端進行反格式化
筆者採用的是方案一、相關聯開發環境如下:
Windows 7(x64)
Visual Studio 2010
方案中使用的代碼:
public sealed class ExcelHelper
{ private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;"; public static DataSet ExcelDataSource(string filePath, string sheetName) { OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetName + "$]", string.Format(CONNECTION_STRING,filePath)); DataSet ds = new DataSet(); oada.Fill(ds); return ds; } public static List<string> ExcelSheetName(string filePath) { List<string> list = new List<string>(); OleDbConnection conn = new OleDbConnection(string.Format(CONNECTION_STRING, filePath)); conn.Open(); DataTable sheetNames = conn.GetOleDbSchemaTable (System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); conn.Close(); foreach (DataRow dr in sheetNames.Rows) { list.Add((string)dr[2]); } return list;}
程式在執行時會拋出:
異常詳細資料: System.InvalidOperationException: 未在本機電腦上註冊“Microsoft.Jet.OLEDB.4.0”提供者。
分析原因:
用於 Access 和 Excel 資料庫的 Microsoft OLE DB Provider for Jet 在 64 位元版本中不可用。
最終解決辦法:
在IIS中啟用32位應該程式、設定見圖。