2014-06-09 19 views
0

我嘗試使用ODP.NET x86從Oracle 11gR2中進行選擇。MVC中的ODP.NET 4

在ConsoleApplication everthing完美工作,但如果我嘗試使相同的選擇在我的MVC 4 WebApplication(從依賴注入服務從ClassLibrary)我得到此錯誤:其他信息:'Oracle.DataAccess.Client.OracleConnection的類型初始值設定項'拋出了一個例外。

我編譯應用程序爲任何CPU。

任何想法?我搞不清楚了。 非常感謝。

的ConnectionString

string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=kango))); User ID=system; Password=root"; 

實例化

using (var connection = new OracleConnection(connectionString)) 
     { 
      var command = new OracleCommand(select); 
      try 
      { 
       command.Connection = connection; 
       connection.Open(); 
       OracleDataReader reader = command.ExecuteReader(); 

       while (reader.HasRows) 
       { ... 
       } 
      } 
     } 

在使用,,」行拋出異常

+0

你使用什麼連接字符串?你如何實例化OracleConnection類? –

+0

@ user2080814 - 請養成編輯問題的習慣以添加新信息。在評論中加入更多信息使得評論和附加信息可能會被試圖幫助的人忽略。如果您會這麼友好,請編輯您的問題,並在問題末尾添加關於連接字符串的信息。謝謝。 –

+0

我編輯我的問題 – user2080814

回答

1

你爲什麼不張貼異常(錯誤消息和調用堆棧)?它通常包含解決問題的關鍵信息。

Absent我的直覺是你的「任何CPU」內部版本都是64位執行的,這導致它無法加載32位的native Oracle DLLs。要考慮的解決方案:

  • 要麼繼續使用舊的「混合模式」ODP.NET併爲特定位元構建as shown here
  • 或者使用新的「完全託管」的ODP.NET,它本質上是「任何CPU」。
+0

如果「完全託管ODP.NET」意味着Oracle.ManagedDataAccess.dll - 我試過了,但是這個庫不能和XMLType一起工作,而且我無法讀取這種類型的列。 – user2080814

+0

@user - 我可以證實這一點。過去我有類似的問題,並發現Web應用程序運行在64位模式下。 'InnerException'(我在上面的評論中需要)說「Bad Image Format Exception」,它指向32-64衝突。如果您使用的是IIS,您可以定義運行代碼的模式。如果使用Cassandra(對於IIS Express也應該如此),將編譯模式更改爲32位x86應該足夠了。但請注意,由於您可能會遇到64位版本中只有其他庫存在不良圖像問題。 – chiccodoro

0

另一種解決方案是在您的機器上安裝32位(x86)和64位(x64)Oracle客戶機。這裏是一個說明如何做到這一點,使他們工作:Install Oracle Client x86 and x64