最近有一個項目Microsoft.Jet.OleDb,主要用於從Excel中匯入資料,在調試階段一直是正常的。但一部署到客戶的環境中(Windows Server 2008 R2 + Server 2000 + IIS7)匯入資料的功能就出現問題了
其錯誤如下:
System.InvalidOperationException: 未在本機電腦上註冊“Microsoft.Jet.OleDb.4.0”提供者。
在 System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.OleDb.OleDbConnection.Open()
在 ExcelOperation.ImportFromExcel(String fileName, String strSql)
在 Retiree_ImportData.btnImport_Click(Object sender, EventArgs e)
在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
後來瞭解到客戶的作業系統為64位,通過IIS程式池設定中啟用32位應用程式選項中設定為True,問題隨即解決如:
另外如果不想更新IIS程式池的配置,也可以將程式編譯成x86即可,具體請參考:
未能負載檔案或程式集 XX 或它的某一個依賴項
============================================
2013-04-22
今天,又遇一個問題,同樣是64位系統造成的,Windows Server 2003 64位,出現的錯誤同樣為“未在本機電腦上註冊“Microsoft.Jet.OleDb.4.0”提供者”,但解決的方法與Windows Server 2008 64位不太一樣,具體步驟如下:
1、將以下指令碼儲存為bat,並運行:
cd %SYSTEMDRIVE%\WINDOWS\system32cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
2、重新案例.net framework2.0
問題搞定。
未在本機電腦上註冊“Microsoft.Jet.OleDb.4.0”提供者