1.使用OLEDB讀取Excel,本機調試正常,但是部署IIS上后,當點擊按鈕時,按鈕變灰,系統也沒捕獲異常。
在瀏覽器中看到異常:未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程序
百度搜索到問題原因是:Microsoft.Jet.OLEDB.4.0這個只能32位環境運行,服務器是64位。
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + allPath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; OleDbConnection connection = new OleDbConnection(connectionString); connection.Open(); DataTable oleDbSchemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); connection.Close(); //默認讀取第一sheet OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + oleDbSchemaTable.Rows[0]["TABLE_NAME"].ToString() + "]"
, connectionString); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "ExcelInfo"); DataTable dt = dataSet.Tables[0];
2.解決辦法:
方法一:更改IIS設置,啟用32位應用程序,這樣就可以兼容32位了。
方法二:
第一步,先安裝
Microsoft Access Database Engine 2010 Redistributable
http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D
個人感覺如果系統office應該就不用再裝驅動了。
第二步 修改連接
原來連接 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Extended Properties="Excel 8.0;HDR=YES;IMEX=1"
修改為:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.xls;Extended Properties="Excel 12.0;HDR=YES;IMEX=1"