我正在尝试安装Windows应用并连接到Oracle数据库。现在,这就是我想要做的。当我从开发服务器(Windows 2003 Server)测试它时,它工作正常。我复制"输出"的内容文件夹(.exe文件所在的文件夹)到我的本地计算机(Windows 7)并尝试运行相同的应用程序并获取错误。当我将代码复制到运行Windows 2003的另一台服务器时,会发生同样的事情。我得到的错误是: "无法加载文件或程序集' Oracle.DataAccess,版本2.112.3.0,culture = neutral,公钥标记= 89b483f429c47342'或其中一个依赖项。试图加载格式不正确的程序。"
由于我的本地计算机或测试失败的服务器上没有Oracle.DataAccess.DLL文件,我想也许我可以将DLL复制到Windows应用程序的输出文件夹,添加对此的引用DLL和编译。但那不是解决方案。
有没有什么方法可以解决这个问题而不期望这个应用程序(最终,Windows服务)运行的每台机器都在GAC中运行Oracle.DataAccess.DLL?我是否必须在此应用程序将运行的所有计算机上安装ODAC(类似于几百台服务器)?
答案 0 :(得分:0)
如果您可以使用System.Data.OracleClient连接,则不必在服务器上执行任何特殊操作。
如果要使用ODAC连接器,则需要在每台服务器上安装客户端并包含TNS名称。这对甲骨文来说是一个糟糕的设计。
答案 1 :(得分:0)
System.Data.OracleClient和Oracle.DataAccess都要求您在每台服务器上安装Oracle客户端软件。因此,它们的可移植性还有很多不足之处。
部署Oracle软件的一种更便携的方式是使用托管Oracle库Oracle.ManagedDataAccess,该库可通过Nuget获得。它不需要安装Oracle客户端。
请注意,由于Oracle.ManagedDataAccess不依赖于oracle客户端软件,因此您必须调整某些配置。您可以将tnsnames.ora与已部署的应用程序一起包含,像在tnsnames.ora中的条目一样编写连接字符串,也可以指定确切的hostname / port / oracle sid。
如果您坚持使用非托管Oracle客户端,请考虑以下事项:
System.Data.OracleClient(和System.Data.OleDb)比Oracle.DataAccess更易于部署,因为它们是.NET框架的一部分,并且是为任何CPU编写的。但是,它们都具有相同的功能和相同的限制; System.Data.OracleClient也是不推荐使用的库。
另一方面,Oracle.DataAccess提供了更多功能,但同时提供x64和x86两种版本,这可能会使部署变得更加棘手(尤其是在IIS托管的Web应用程序上)。