Winforms Windows应用程序和Oracle数据库访问问题

Winforms Windows应用程序和Oracle数据库访问问题,winforms,oracle,odac,Winforms,Oracle,Odac,我正在尝试使用Windows应用程序并连接到Oracle数据库。现在,这就是我想要做的。当我在开发服务器(Windows2003Server)上测试时,它运行良好。我将“output”文件夹(其中包含.exe文件)的内容复制到本地计算机(Windows 7)上,并尝试运行同一个应用程序,但出现错误。当我将代码复制到另一台运行Windows2003的服务器时,也会发生同样的情况。我得到的错误是: 无法加载文件或程序集“Oracle.DataAccess,版本2.112.3.0,区域性=中性,公钥标

我正在尝试使用Windows应用程序并连接到Oracle数据库。现在,这就是我想要做的。当我在开发服务器(Windows2003Server)上测试时,它运行良好。我将“output”文件夹(其中包含.exe文件)的内容复制到本地计算机(Windows 7)上,并尝试运行同一个应用程序,但出现错误。当我将代码复制到另一台运行Windows2003的服务器时,也会发生同样的情况。我得到的错误是: 无法加载文件或程序集“Oracle.DataAccess,版本2.112.3.0,区域性=中性,公钥标记=89b483f429c47342”或其依赖项之一。试图加载格式不正确的程序

由于我的本地计算机或测试失败的服务器上都没有Oracle.DataAccess.DLL文件,我想也许我可以将DLL复制到Windows应用程序的输出文件夹,添加对此DLL的引用并编译。但这不是解决办法


有没有什么方法可以解决这个问题,而不需要让运行此应用程序(最终是Windows服务)的每台计算机都在GAC中有Oracle.DataAccess.DLL?我是否必须在运行此应用程序的所有计算机上安装ODAC(大约几百台服务器)?

如果您可以使用System.Data.OracleClient连接,那么您就不必在服务器上执行任何特殊操作


如果要使用ODAC连接器,则需要在每个服务器上安装客户端,并包含TNS名称。Oracle方面的设计很糟糕。

System.Data.OracleClient和Oracle.DataAccess都要求您在每台服务器上安装Oracle客户端软件。因此,它们的可移植性还有很多需要改进的地方

部署Oracle软件的一种更方便的方法是使用托管Oracle库Oracle.ManagedDataAccess,该库可通过Nuget获得。它不需要安装Oracle客户端

请注意,由于Oracle.ManagedDataAccess不依赖Oracle客户端软件,因此必须调整某些配置。您可以将tnsnames.ora与部署的应用程序一起包含,按照在tnsnames.ora中输入的方式写入连接字符串,也可以指定确切的主机名/端口/oracle sid

如果您坚持使用非托管Oracle客户端,请考虑以下内容:

System.Data.OracleClient(和System.Data.OleDb)比Oracle.DataAccess更易于部署,因为它们是.NET framework的一部分,是为任何CPU编写的。然而,它们都具有相同的功能和相同的限制;System.Data.OracleClient也是一个不推荐使用的库


另一方面,Oracle.DataAccess提供了更多的功能,但有x64和x86两种版本,这会使部署变得更加棘手(尤其是在IIS托管的web应用程序上)。

我通过使用System.Data.OracleClient而不是Oracle.DataAccess.Client解决了这一问题。不确定这是否是解决问题的正确方法,但至少是一个短期解决方案。NoBullMan-这可能有效,因为Oracle.DataAccess.Client提供了x86和x64版本。为了使Oracle.DataAccess.Client处于正常工作状态,您可能需要执行一些附加的配置和/或安装,这对于System.Data.OracleClient是不必要的。如果你有一个x86动态链接库和一个x64客户端,或者反之亦然,它将无法工作。