2014-06-09 16 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