Unable to load DLL 'OraOps10.dll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Unable to load DLL 'OraOps10.dll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

搞了一下午, 終於發現找出解決方式, 供大家參考:

 

首先關於調用Oracle Connection, 在asp.net 端測試都沒有問題, 但是佈署到 IIS 發生問題,

錯誤訊息: Unable to load DLL 'OraOps10.dll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

因為筆者需要特別呼叫 Oracle 類別, 所以不考慮用元件(Sql完成)

OracleConnection connOracle = new OracleConnection("Data Source = XXXXX; User ID = XXXX; Password = XXXXXX;"); connOracle1.Open();
OracleCommand cmdOracle = new OracleCommand(sql, connOracle1); OracleDataReader readerOracle = cmdOracle.ExecuteReader();

另外, 也不用太在乎是否該網站已經 include 該 Oracle 的 dll, 因為其實當你加入參考的時候, 程式就已經自動為你在 web.config 內加入該 dll

<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="Oracle.DataAccess, Version=10.1.0.200, Culture=neutral, PublicKeyToken=89B483F429C47342"/> </assemblies></compilation>

解決這個問題方式很簡單,

1. 改用 DSN 先將 Oracle 的連線做好, 然後呼叫這個DSN

2. 或是, 把 c:\Oracle\product\10.1.1.0\Client_1 這個目錄的權限打開, 加入 IUSR 和 ASPNET 的帳號, 就給他 full 的權限吧 (當然要先灌好 Oracle Client 才行)

這樣就解決了 ^^