gpt4 book ai didi

c# - 如何从 .NET 使用 Oracle?

转载 作者:IT王子 更新时间:2023-10-29 04:19:41 25 4
gpt4 key购买 nike

不幸的是,我正在尝试从 .NET 使用 Oracle,这就像回到 1997 年。正确解释事情是一种弱点,注册表和环境变量似乎具有特色。

所以这是我有多远。

我在 Oracle.com 上填写了一份关于我生活的巨大表格并下载了

ODBC Windows 64 位实例客户端,11.2.0.3.0 并将其解压缩到一个文件夹中。
基本 Windows 64 位即时客户端,11.2.0.3.0 并将其解压缩到与上面相同的文件夹中。

我运行了安装 .exe(没有 MSI,请记住这是 1997 年)。

我添加了一个 TNS_NAMES 环境变量,指向网络共享上的公司 TNSNames.ora 文件,并在控制面板中设置了一个快速 DSN 并运行了测试 - 成功了!

然后,我下载了适用于 .NET 4.0 的最新 ODP.NET 的 XCOPY 版本,并将其复制到我的源代码控制工作区下的 Dependencies 文件夹中。

我从我的项目中添加了对 的引用Dependencies\odp.net4\odp.net\bin\4\Oracle.DataAccess.dll

我读过我需要让托管 ODP.NET 的东西知道在哪里可以找到它的非托管 Oracle 库,我猜是 Dependencies\odp.net4\bin\OraOps11w.dll 但它可能是其他一些 Oracle 二进制文件?

现在我正在设置一个名为 DllPath 的配置文件参数。遗憾的是,Oracle 文档似乎没有意识到 .NET 配置文件需要将它们的部分连接到 configSections 部分。

这是配置文件部分。

<oracle.dataaccess.client>
<add key="DllPath" value="D:\Trunk\Dependencies\odp.net4\bin" />
</oracle.dataaccess.client>

configSection 中有什么?我在这方面找到的几个线程给出了一个例子,然后说“我不知道 type= 应该是什么”,这是主要的一点!

任何人都可以给我建议吗?有人知道从 .NET 查询 Oracle View 的傻瓜指南的链接吗?

我在 1997 年可以做些什么来阻止自己在 2012 年不得不使用 Oracle?

更新

只是快速更新。我已将 OraOps11w.dll 复制到我的输出 bin 文件夹中,并删除了我之前添加的所有 web.config 文件更改。

我现在收到以下错误,我正在研究。

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.



其他一些论坛讨论在 GAC 中注册 Oracle.DataAccess.dll,我很想避免这种情况——无论如何我看不出有什么区别,但我会试一试。

更新 2

在 GAC 中注册 Oracle.DataAccess.dll 库没有任何区别,我已取消注册它。

一周的工作即将结束,我必须 catch 火车,但我已经给这里的另一个开发团队发了电子邮件,希望他们以前打过这场仗(而不是像其他人一样使用夜间提取物)。

更新 3

今天早上我下载并安装了 64 位版本的 IIS Express 8.0 RC。 VS2010 不支持 64 位版本,因此需要从命令行运行。这相当简单,通过查看任务管理器,我能够看到 VS 对 iisexpress.exe *32 使用的命令行。

不幸的是,我在浏览由 6​​4 位 IIS Express 托管的站点时遇到此错误。

Handler "ExtensionlessUrl-Integrated-4.0" has a bad module "ManagedPipelineHandler" in its module list



这是一个在这条查询线中太远的问题,所以我将尝试使用 ODP.NET 的 32 位版本。

更新 4

我下载了 32 位版本的完整安装,但是当我看到 Oracle Universal Installer 时我很害怕。我的宝贵开发箱看起来太 90 年代了。所以我使用的是 32 位的“XCopy”客户端,这让我可以调出我网站的主页,所以引用是有效的。感谢那些提出架构不匹配 32/64 问题的人。

现在我在实例化一个新的 OracleConnection 时正在调查这个错误。

The provider is not compatible with the version of Oracle client



更新 5 我想我已经做到了。

因此,我下载了 32 位最新的 11g“即时客户端”,并将其放在我的\Dependencies 文件夹中以获取解决方案主干代码库。我将此文件夹添加到 %PATH% 系统环境变量,并将 OraOps11w.dll 文件放入其中。

最后,_oracleConnection = new OracleConnection(connectionString) 不会抛出!现在我需要确保在我部署到生产环境时 table 上有一瓶 Laphroaig。

因此,回顾一下,对于 Windows 7、64 上的 IIS Express 7.5(这是一个 32 位进程):
  • 下载 32 位 11g“即时客户端”并将其解压缩到某个文件夹,然后将此位置添加到您的 PATH。 Oci.dll 是主要的 Oracle 客户端非托管库。
  • 下载 32 位 ODP.NET 并将其解压缩到某个文件夹。
  • 将 OraOps11w.dll 复制到 Instant Client 所在的主文件夹(上图)。
  • 添加指向 TNSNames.ora 文本文件所在文件夹的 TNS_ADMIN 环境变量。这就像一个主机文件,将 Oracle 服务名称映射到服务器主机名。
  • 关闭并重新打开 Visual Studio 以确保您选择新的环境变量,并在您的 ODP.NET 文件夹中添加对 Oracle.DataAccess.dll 托管程序集的引用。

  • 应该是这样。当您知道如何操作时,听起来相当简单。

    更新 5.1

    调查下面的错误,我最初没有报告,因为我确定这是一个防火墙问题。我所在的公司在每个工作站上有两个,但我只是打开了一个到 Oracle 服务器的原始套接字,所以它不能。

    ORA-12541: TNS:no listener

    最佳答案

    解释该问题的最简单方法是指出 Oracle 客户端和 ODAC 客户端库之间的区别。

    在 64 位计算机(Windows 7+)上,您需要安装 64 位 Oracle 客户端。这是您的机器将用于连接到在您的机器上本地部署的 Oracle 数据库的客户端。对于托管在 Web 服务器或其他终端服务器上的应用程序,规则是相同的。

    诀窍是……作为开发人员,我们的机器还必须具有 .Net IDE 工具。 Oracle 有一个蹩脚的命名约定,但本质上有两个部分:ODT(工具)和 ODAC(数据访问)。 ODP.Net 数据提供程序是 ODAC 库的一部分。

    所以……回到 IDE……Vis​​ual Studio 是 32 位的,因此我们必须在 32 位中安装上面的工具。

    在开发、调试等过程中,VS.Net 使用 32 位客户端库和数据访问库与 Oracle 一起工作。

    只要您将此应用程序部署到机器上,它就会使用机器上加载的任何客户端,除非针对特定平台。

    这意味着如果你的目标是 32 并部署到 64,它就会崩溃……反之亦然。最好的办法是把它留在任何平台部分,只需记住你到底在做什么:)

    另一件要小心的事情是确保您的客户端和 ODAC 包的版本相同……您不希望拥有 11g R2 客户端和 11g R5 ODAC,因为一旦部署,废话就会再次中断。

    这里需要注意的是,如果您希望将 oracle 客户端“嵌入”到您的应用程序中,在这种情况下,OraOps 与其他几个库与应用程序一起部署 - 这称为 Oracle 即时客户端,也是 ODAC 包的一部分并包含在内在他们完整的客户端包中。

    好消息...

    Oracle 很快(2013 年第一季度)将发布他们的下一个 ODP.Net 包......这将是一个完全托管的代码库......意味着不再需要单独的客户端或 ODAC 包来匹配,并且平台将不知道 32和 64 位的区别……它的功能与旧的 microsoft 库非常相似,只是它由 oracle 构建和维护,具有更强大的功能集。我只希望它早点到达。

    关于c# - 如何从 .NET 使用 Oracle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366695/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com