一直使用以下代碼從Excel中取資料,速度快友善:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFileName + ";" + "Extended Properties=Excel 8.0;";
OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [" + strSheet + "$]", strConn);
DataSet dstExcel = new DataSet();
ExcelDA.Fill(dstExcel, "ExcelInfo");
但這次釋出到windows 2008 R2上後卻報錯。上網查詢後得知IIS7會支援一部分32位DLL,但對于與底層綁定較深的元件卻不支援。Jet 4.0顯示屬于後一種元件。微軟已經不支援Jet 4.0的更新,是以目前沒有,今後也不會再出現Jet 4.0的64位版本。
基于此網上大部分的解決方案是将應用程式池的Enable 32 bit選項設為True(如下圖所示)。這種方案的确可以解決問題,但有以下隐患:
1.今後的發展方向肯定是64位,使用這種方式隻是臨時解決了問題,治标不治本。
2.在我們系統中還用到了Oracle Client, SAP Connector等仍舊需要64位
3.MOSS系統中也可能會用到類似的功能,不可以降到32位
鑒于以上問題,我開始查找替代方案,終于查到也可以使用Microsoft.ACE.OLEDB對Excel進行操作。修改後的腳本如下:
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source="+ strFileName + ";" + "Extended Properties='Excel 12.0;HDR=YES'";
注意'Excel 12.0;HDR=YES'處的單引号不能少。
相信還有其它替代方案,請大家多提寶貴意見。