如何编写同时与SqlServer和Oracle一起使用的.Net应用程序(现在System.Data.OracleClient已被弃用)

如何编写同时与SqlServer和Oracle一起使用的.Net应用程序(现在System.Data.OracleClient已被弃用),.net,sql-server,oracle,ado.net,odp.net,.net,Sql Server,Oracle,Ado.net,Odp.net,另见 (首先,不要惊慌,System.Data.OracleClient尚未被Microsoft删除,但它不在.net 4的客户端版本中) 通过使用System.Data.OracleClient,可以实现此用途。(OracleClient是Microsoft为Oracle开发的ADO.NET提供程序,是.NET Framework的一部分。) 您可以使用ODP.Net,但是您希望您的Sql Server客户必须安装ODP.Net吗?(您是否希望您的任何客户必须安装Oracle软件?) 这不是一

另见

(首先,不要惊慌,System.Data.OracleClient尚未被Microsoft删除,但它不在.net 4的客户端版本中)

通过使用System.Data.OracleClient,可以实现此用途。(OracleClient是Microsoft为Oracle开发的ADO.NET提供程序,是.NET Framework的一部分。)

您可以使用ODP.Net,但是您希望您的Sql Server客户必须安装ODP.Net吗?(您是否希望您的任何客户必须安装Oracle软件?)

这不是一种选择,因为它需要花费一大笔钱;如果您需要将一台服务器连接到大型机,那么它可能是价格合理的。但是,并不是期望所有客户都购买它

从C#迁移到Java不是一个好的选择,因为我是一名C#程序员,希望能够谋生

与大多数必须支持多个RDBMS的ISV一样,我们只需要一个解决方案,该解决方案允许我们使用与SqlServer相同的Oracle的一小部分。因此System.Data.OracleClient对我们来说足够强大

(也许我们应该开始将所有数据存储在平面文件中,这样客户的DBA就不会再试图告诉我们如何编写软件了。Oracle DBA更糟糕!)


我真正的问题是,我如何才能编写与Oracle对话的.NET软件,而Oracle可以免费安装为与SqlServer对话的.NET软件。不得不使用ODP.NET只会让oracle客户端的安装更加痛苦,还会出现更多的错误

如果我使用JAVA,我就可以使用JDBCType4驱动程序。Microsoft为SqlServer提供了一个,Oracle为Oracle提供了一个。然而,Oracle似乎希望尽可能地减少.Net的使用,而Microsoft则希望尽可能地减少Oracle的使用


到目前为止,最佳选项看起来像

然而,我开始质疑weather.NET是否是ISV的一个好的开发系统,因为迟早会有客户要求oracle支持。在Java世界中,他们似乎已经解决了这个问题



看起来Oracle可能即将推出一个完全管理的ADO.NET提供程序,它本身甚至可能很容易安装!请参见2011年Beta版和2011年底的产品声明。

将ODBC同时用于这两个版本是否可行?

被弃用和被删除之间有很大的区别

如果您只是在使用SQL Server和Oracle通用的功能子集,那么您应该可以顺利过渡到ASP.Net 4.0并继续编写当前的程序

使用类似,将使您相对不确定提供者。(它在DAL中使用OracleClient)

完全同意Philippe的观点,Oracle的客户端软件令人痛苦。我已经记不清安装过多少次了,我讨厌这种体验。优先给我MySQL、SQLServer甚至Access


(事实上,我收回了访问评论):-)

人们不应该现在就使用吗

> P>除了其他人建议您可以考虑使用提供者模式和Oracle的ODP.NET.< /P> < P>,只要您不调用ODP.NET对象,如果您只访问SQLServer,就不需要安装ODP。

您查看过类似的Oracle提供程序吗?例如,这个驱动程序是100%托管代码,支持许多高级Oracle功能,提供实体框架支持(我相信有一天会在ODP.NET中出现)

在ODP.NET 11g发布之前,我们还没有获得许多其他功能(如ASP.NET提供程序模型支持)。相当自由的许可和合理的价格。如果我没记错的话,它还有自己的分析器

在中,与ODP.NET相比,性能良好。我想告诉你一些开源的东西,但是在我的经验中,一旦你购买了甲骨文作为一个数据库,你就已经接受了你将为你的数据库相关的工具放置一些现金的事实。我让它运行我的SQLServer、MySQL和基于SQLite的应用程序,用户可以在运行时在这三者之间切换

使用“提供者工厂模式”,它基本上是使用工厂来提供一个数据提供者,该数据提供者完全从使用它的数据库请求方法中抽象出来。这里有一些示例代码,说明了如何做到这一点。dnrtv.com上的第1部分也说明了如何做到这一点

这是一些非常酷的东西,基本上你有一个工厂,它提供了一种获取连接的方法

public IDbConnection GetConnection()
{
     IDbConnection connection =  _frameworkDBProviderFactory.CreateConnection();
     connection.ConnectionString = _authenticationSettings.ConnectionString;            
     return connection;
} 
通过一个接口,您可以调用任何类型的数据库,谁的连接对象实现了IDbConnection接口(SQLServer、MySQL、Oracle等),它就可以正常工作


通过抽象出您所使用的数据库,您甚至可以在运行时交换它们,而您的应用程序将永远不会知道,连接到原始数据库、下载相同的东西、实现IDbConnection并根据抽象的连接编写代码都不需要这样做。

根据我的经验,您不能简单地部署ODP.NET数据提供程序DLL。除了默认配置之外,Oracle还需要一个主安装(例如,我们使用LDAP名称解析,需要一个位于特殊主路径中的LDAP.ora文件)

但是,ODP.NET很好地实现了ADO.NET 2.0标准(DbProviderFactory等)。在我的公司,我已经针对基类(DbConnection、DbCommand等)编程了一段时间,而不需要特定的类

我的建议是使用或遵循or使用中的指导


如果您在安装ODP.NET或将其发送给客户/客户时遇到物流或IT问题,我建议您与IT人员和Oracle讨论解决方案。

客户应安装ODP.NET和or