【问题标题】:The provider is not compatible with the version of Oracle client error when using Oracle.DataClient使用Oracle.DataClient时提供程序与Oracle客户端版本不兼容报错
【发布时间】:2010-11-18 01:11:32
【问题描述】:

我正在使用 Visual Studio 2008 Express Edition,并且正在尝试使用 Oracle.DataClient 开发一个小型应用程序。 尝试连接到目标系统中的数据库时,出现上述错误。

我为 Oracle 10gR2 添加了对 Oracle ODP.net 提供程序的引用,并且在目标机器上我安装了 Oracle 10gR2 数据库的副本。尽管如此,我还是得到了错误。 在发布此之前,我在 SO 阅读了this post,并且我已经安装了即时客户端,但错误仍然存​​在。 下面是完整的错误堆栈。

************** Exception Text **************
System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client    at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()
   --- End of inner exception stack trace ---
   at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
   at Employees1.frmLogin.oralogin()
   at Employees1.frmLogin.btnTest_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
API Data Conversion Assistant
    Assembly Version: 0.0.0.1
    Win32 Version: 0.0.0.1
    CodeBase: file:///C:/Documents%20and%20Settings/3i/My%20Documents/My%20Dropbox/Sathya's%20dropbox/VisualStudio%20Releases/APIDataconversion/Application%20Files/API%20Data%20Conversion%20Assistant_0_0_0_3/API%20Data%20Conversion%20Assistant.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Oracle.DataAccess
    Assembly Version: 2.102.2.20
    Win32 Version: 2.102.2.20

我在开发应用程序的机器上安装了 Oracle 11g,它在那里工作正常,但在目标机器上,我收到了这个错误。 任何意见将不胜感激。

PS:如上所述,引用的Oracle.DataClient.dll文件版本对应的是10gR2,而不是11g。

【问题讨论】:

  • 如果对问题投反对票的人能在评论中提供他们的理由,那就太好了...
  • 我认为这是一个很好的问题,因为我整个上午都在为同样的问题苦苦挣扎。

标签: visual-studio-2008 oracle odp.net


【解决方案1】:

您是否在客户端系统上使用 ODBC 管理器创建并成功测试了连接?

有一个针对 9i 和 10g 客户端中导致此错误的权限问题的补丁。如果您使用的是 10.2.0.1,则可能需要升级到 10.2.0.3 才能解决此问题。

【讨论】:

  • @dcookie:是的,ODBC 连接成功,因为我的 SP 将数据从 MS SQL Server 检索到 Oracle 表中。
【解决方案2】:

我已经让我的应用程序使用 Ole DB(System.Data.Oledb 命名空间) 连接,它工作正常。考虑到该应用程序只是调用 Oracle SP 的前端,并且没有返回任何值,我想这种方法是可以接受的,因为在 2 天内我试图找出解决这个问题的方法,我本可以完成很多在应用程序上进行更多开发。 我仍然愿意接受答案,因为我可以从我将来为任何此类应用程序所犯的错误中吸取教训。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。如果您的机器上安装了 11g 客户端,那么您需要使用 11g ODP.Net DLL。我必须完全卸载所有东西,然后安装 11g 客户端,然后安装 11g ODP.NET 驱动程序。驱动程序安装在 GAC 中,这有点痛苦。

    *注意,根据我的 DBA 的理解,这仅在您不必连接到任何低于 9i 的版本时才有效 *

    我们也必须在我们的服务器上这样做。

    HTH

    【讨论】:

      【解决方案4】:

      我一直在进一步研究这个问题,您只需从同一个下载版本的 ODP.Net 中获取所有适当的 DLL,并将它们放在与您的 Exe 文件相同的文件夹中,因为 ODP.Net 很麻烦关于不混合版本号,这是您看到的问题(要么完全丢失,要么 oci.dll 完全丢失,在这种情况下,它会令人讨厌地给出相同的错误)。

      我已经在这里解释了如何做到这一点:http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c 不过,这里是它的要点:

      【讨论】:

      • 非常感谢您的指导,它就像一个魅力!对于其他有同样问题的人:the most recent version 直接包含 DLL。
      【解决方案5】:

      即使在安装了适当的 Oracle 客户端版本之后,我们也必须检查服务器中安装了哪个 .Net Framewark,ODP.Net 支持 .Net Framework 3.5 到 4.5.2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2010-10-14
        • 2013-06-29
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        相关资源
        最近更新 更多