在Windows 10 C中为ODP.NET加载DLL时出错#

时间:2017-04-12 03:47:51

标签: c# oracle

我正在跑步:

  1. Windows 10 Home
  2. Oracle数据库11g企业版11.2.0.1 - 64位版本
  3. Visual Studio Express 2013
  4. 我想编写一个简单的C#应用​​程序来从Oracle数据库中读取数据,并希望使用ODP.NET。但是,在运行程序时,我立即遇到运行时错误。

    1. 我启动了一个新的Windows窗体项目。

    2. 我在目录c:\ app \ Dave \ product \ 11.2.0 \ dbhome_1 \ ODP.NET \ bin \ 2.x \

    3. 中链接了服务Oracle.DataAccess.dll

      我的代码是:

      using System.Linq;
      using System.Threading.Tasks;
      using System.Windows.Forms;
      
      namespace testapp_2
      {
          static class Program
          {
              /// <summary>
              /// The main entry point for the application.
              /// </summary>
              [STAThread]
              static void Main()
              {
                  Application.EnableVisualStyles();
                  Application.SetCompatibleTextRenderingDefault(false);
                  Application.Run(new Form1());
              }
          }
      }
      

      代码:

      using Oracle.DataAccess.Client;
      using Oracle.DataAccess.Types;  
      
      namespace testapp_2
      {
          public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
                  OracleConnection conn = new OracleConnection();
              }
          }
      }
      

      错误是:

        

      无法加载文件或程序集'Oracle.DataAccess,Version = 2.112.1.0,   Culture = neutral,PublicKeyToken = 89b483f429c47342'或其中一个   依赖。尝试加载程序不正确   格式。

      在调试模式下运行时,程序将停止在行:

      Application.Run(new Form1());
      

      我过去曾在Windows XP下成功使用过Visual Stdio Express 2008和Oracle 10g,并认为这与以前一样非常简单,但显然不是。

      有没有其他人遇到此错误,希望找到解决方法?我非常感谢任何帮助或信息。

      非常感谢!

      -Dave。

2 个答案:

答案 0 :(得分:0)

在某些情况下,.net DLL不会在64位系统下同时针对x86和x64平台(如Microsoft Expression Encoder)。启动调试时可能会发生此错误(不确定它与ODP.NET的情况相同)。解决方案是将项目中的构建设置更改为目标x86而不是任何CPU。

答案 1 :(得分:0)

感谢大家发布了这么多有用的评论。

我尝试按照建议将目标CPU更改为x86而不是任何CPU(我也试过x64),但它没有任何区别。

但是考虑到这个话题让我觉得这可能是一个旧的ODP.NET dll,并且与当前/最新版本的.NET不兼容。

所以(在“属性”和“应用程序”选项卡中,我将目标.NET框架更改为.NET 3.5并且确实足以解决我的问题!

我现在能够从C#读取和写入数据库中的数据!我很高兴并且感到宽慰,现在它正在发挥作用。

再次感谢大家帮助我解决这个问题! : - )

-D。