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

StackOverflow https://stackoverflow.com/questions/1193066

也可以看看 System.Data.OracleClient 命名空间已终止?

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

通过使用 System.Data.OracleClient 可以实现此用途, 然而 Microsoft 已决定弃用 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 软件,以便我们轻松安装为与 SqlServer 对话的 .NET 软件。必须使用 ODP.NET 只会让 Oracle 客户端的安装变得更加痛苦,而且还会出现更多错误。

如果我使用 JAVA,我可以只使用 JDBC 类型 4 驱动程序。Microsoft 为 SqlServer 提供了一种,Oracle 为 Oracle 提供了一种。然而,Oracle 似乎希望让 .Net 的使用尽可能困难,而 Microsoft 则希望让 Oracle 的使用尽可能困难。


到目前为止 最好的选择 好像 devArt 的 dotConnect.

然而,我开始怀疑 .NET 对于 ISV 是否是一个好的开发系统,因为迟早你总会遇到需要 Oracle 支持的客户。在Java世界里他们似乎已经解决了这个问题。


看起来 Oracle 可能即将推出一个明智的完全托管 ADO.NET 提供程序,它甚至可能很容易安装!看 这里 声称 Beta 版 – 2011 年,生产版 – 2011 年底。

有帮助吗?

解决方案

编辑:全管理ODP.NET现在是在生产可用。这是非常小(小于10MB),而且不依赖于其他文件。你可以在这里得到它:

http://www.oracle.com/technetwork/topics /dotnet/downloads/index.html

原来的答复:

要一种方式的容易的保证所需的Oracle客户端软件(包括ODP.NET)总是可用的部署机器上是与您的应用程序中嵌入它。 ODP.NET已经得到了的很多的现在更容易嵌入该XCOPY ODP.NET是可用的。你可以从这个链接下载:

http://www.oracle.com/technology /software/tech/windows/odpnet/index.html

使用XCOPY ODP.NET,当你部署应用程序,所有你需要做的是以下内容:

1)你的应用程序复制到目标机器

2)运行 “INSTALL.BAT”,其拷贝几个甲骨文DLL的到目标机器(包括ODP.NET和Oracle客户端侧(OCI)软件)

3)运行“configure.bat”,这确实是“GACUTIL”和更新目标计算机的注册表

4)提供与连接字符串信息应用程序。您可以使用EZCONNECT连接字符串(“主机名@服务名”)或您(或您的客户)可以通过设置TNS_ADMIN注册表项或环境变量指向具有SQLNET连接已配置的别名另一个Oracle家庭共享已有的SQLNET配置。

这就是它!它是这么简单。

我希望你将采取在ODP.NET XCOPY在上面的链接好好看看,看看自己是多么容易,这些天来嵌入ODP.NET与您的应用程序。


其他备注:

如果您选择不嵌入ODP.NET与您的应用程序,在微软OracleClient的双方的情况和ODP.NET的情况下,需要安装任何部署的机器上附加的Oracle客户端(OCI)软件。这两种情况之间的唯一区别是,当你使用ODP.NET,它也需要在部署计算机上存在。好消息是,一个典型的Oracle安装客户机上包括ODP.NET了。

现在,如果你的目标机器上已经安装ODP.NET你不需要做任何事情。你只需要分发应用程序。如果确实需要使用标准的安装程序安装ODP.NET,你也可以从上面提供的链接下载。该标准ODP.NET安装只需要几分钟的时间,并为你配置的一切。

和再次,你可以使用EZCONNECT连接字符串,以使网络配置一块蛋糕,或者使用TNS_ADMIN注册表项或环境变量来利用预先存在的连接,你的客户已经习惯了使用别名。

希望这有助于,

基督教吉文

的Oracle

随意提供关于这一点,我们的功能要求网站的其他功能,将来您的反馈意见: http://apex.oracle.com/pls/apex/f? p值= 18357:46个

其他提示

让你看着替代甲骨文供应商,如 devArt的dotConnect ?该驱动程序,作为一个例子,是100%的托管代码,支持许多高级的Oracle特性,提供了实体框架的支持(这会是有一天在ODP.NET,我敢肯定)。

有一堆的,我们没有得到,直到ODP.NET 11g版本的其他功能(如ASP.NET提供程序模型的支持)。漂亮宽松的许可和价格合理。此外,用它自己的探查,如果我没有记错。

他们的测试时,相比ODP.NET中表现很好。我很想你点的东西开源,但以我的经验,一旦你买了到Oracle的数据库,你已经接受了这个事实,你会放下一些现金为你的数据库相关的工具

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

如果你只是使用的功能子集是常见的SQL Server和Oracle,那就应该罚款通过对ASP.Net 4.0移动并继续程序,你现在怎么做。

使用类似 EntitySpaces ,将让你比较提供商无关。 (它使用OracleClient的在它的DAL)

与菲利普完全同意有关Oracle客户端软件是一种痛苦。我已经记不清我已经安装了它的次数和讨厌的经验。给我的MySQL,SQLServer的甚至访问优先。

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

使用“提供者工厂模式”,它基本上使用工厂来提供完全从数据库请求方法中抽象出来的数据提供者,这里使用它是一个 博客文章 一些示例代码也展示了如何执行此操作 Jean-Paul Boodhoo 浅谈设计模式的神秘面纱 dnrtv.com 上的第 1 部分也展示了如何操作。

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

public IDbConnection GetConnection()
{
     IDbConnection connection =  _frameworkDBProviderFactory.CreateConnection();
     connection.ConnectionString = _authenticationSettings.ConnectionString;            
     return connection;
} 

通过一个接口,您可以调用任何类型的数据库,该数据库的连接对象实现了 IDbConnection 接口(SQLServer、MySQL、Oracle 等),并且它可以正常工作。

通过抽象出您使用的数据库,您甚至可以在运行时交换它们,而您的应用程序永远不会知道,因此不需要连接到 Orical DB,下载 ODP网络, ,同样的事情 mysql 连接器 两者都实现 IDbConnection,并针对抽象连接编写代码。

除了别人建议你可以考虑使用提供模式和Oracle的ODP.NET。

独立于数据库是一项非常艰巨的工作,因为有很多具体的事情(绑定变量命名、对象引用……)。使用类似的库 NHibernate 它在您的应用程序和真实数据库之间放置了一层。

如果您必须连接到两个数据库,那么这就是部署问题。如果连接到 Oracle(使用 System.Data.OracleClient 或 Oracle.DataAccess.Client),则需要在计算机上安装 Oracle 客户端软件。使用框架部署的数据库提供程序不足以连接到oracle数据库。

如果连接到oracle,则必须安装oracle 的软件。如果您担心被弃用,请安装并使用 ODP.Net。有一些 差异 2个oracle数据库提供商之间。

为了更好的部署oracle引入了概念 即时客户端. 。该客户端可以使用 xcopy 部署进行部署。Sine oracle 11 即时客户端可以与 ODP.Net 捆绑。

Christian Shay 的帖子中描述了 ODP.Net 的安装。

Oracle.DataAccess 程序集不得位于全局程序集缓存中。将其放入您的 bin 目录中。Oracle.DataAccess 使用的即时客户端不得位于客户端计算机上的不同目录中。将其放入您的 bin 目录中。这 文档 描述如何配置您的应用程序以查找即时客户端。

请问使用ODBC两种可行?

只要你不调用ODP.Net对象,你并不需要安装ODP如果你只访问SQL Server。

我相信,ODBC仍然可以使用一些透明度都SQL Server和Oracle,所以我会看看使用ADO.Net与ODBC供应商。它不会给你所有的性能或功能的该SqlClient中或OracleClient的会,但它应该是相当接近的Oracle或SQL Server相同的代码。

您可能会考虑使用亚音速3.0 !我有我的运行基于SQLSERVER,MySQL和SQLite的应用程序,用户可以在运行时这3之间切换!

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

然而,ODP.NET 很好地实现了 ADO.NET 2.0 标准(DbProviderFactory 等)。在我的公司一段时间里,我已经针对基类(DbConnection、DbCommand 等)进行了编程,而无需任何特定的类。

我对进行此数据访问的建议是使用/遵循中的指导 恩特库 或使用 NHibernate.

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

客户应该在那里的机器上安装odp.net和Oracle客户端。你不应该部署它。您的应用程序会发现在GAC所需的Oracle DLL的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top