2009-08-09 58 views
16

我正在使用Visual Studio 2008速成版,并且正在尝试使用Oracle.DataClient开发小型应用程序。 尝试连接到目标系统中的数据库时,出现上述错误。当使用Oracle.DataClient时,提供程序与Oracle客户端错误版本不兼容。使用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。

+3

(从 'ociw32.dll.dbl' 重命名)这将是如果回答问题的人会在评论中提供他们的理由,那么这很不错... – DCookie 2009-08-10 16:15:23

+1

我认为这是一个很好的问题,因为我整个上午都在同一个问题上挣扎。 – Chris 2009-08-11 03:15:32

回答

17

我一直在寻找这个问题进一步,你只需从ODP.Net同一下载版本抓住所有适当的DLL的,并把它们放在同一文件夹中的EXE文件,因为ODP.Net对于不混合版本号很烦恼,这就是你看到的问题(无论是或者oci.dll完全没有,在这种情况下,它烦恼地给出相同的错误)。

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

+0

非常感谢您的指导,它像一个魅力!对于具有相同问题的其他人:[最新版本](http://download.oracle.com/otn/nt/instantclient/112020/instantclient-basic-nt-11.2.0.2.0.zip)直接包含DLL 。 – 2011-12-16 11:26:09

1

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

在9i和10g客户端中存在导致此错误的权限问题的修补程序。如果你在10.2.0.1,你可能需要升级到10.2.0.3来解决这个问题。

+0

@dcookie:是的,ODBC连接成功,因为我的SP将数据从MS SQL Server检索到Oracle表中。 – Sathya 2009-08-10 19:08:43

0

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

0

我遇到了同样的问题。如果您的计算机上安装了11g客户端,那么您需要使用11g ODP.Net DLL。我必须完全卸载所有内容,然后安装11g客户端,然后安装11g ODP.NET驱动程序。这些驱动程序会安装在GAC中,它会变得很痛苦。

*请注意,这是从我的DBA我的理解是,如果你这仅适用于没有连接到任何版本低于9i的*

我们不得不这样做我们的服务器上也。

HTH

相关问题