不幸的是,我正在尝试使用 .NET 中的 Oracle,这就像回到 1997 年一样。正确解释事情是弱点的标志,注册表和环境变量似乎很重要。
所以这就是我已经走了多远。
我在 Oracle.com 上填写了一份关于我的生活的巨大表格并下载了
ODBC Windows 64-bit Instance Client, 11.2.0.3.0并将其解压缩到一个文件夹中。 Basic Windows 64-bit Instant Client, 11.2.0.3.0并将其解压缩到与上述相同的文件夹中。
我运行了 install .exe(没有 MSI,记住这是 1997 年)。
我在网络共享上添加了一个指向公司 TNSNames.ora 文件的 TNS_NAMES 环境变量,并在控制面板中设置了一个快速 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 视图的傻瓜指南的链接?
在 1997 年我能做些什么来阻止自己在 2012 年使用 Oracle 吗?
更新
只是快速更新。我已将 OraOps11w.dll 复制到我的输出 bin 文件夹中,并删除了我之前添加的所有 web.config 文件更改。
我现在收到以下错误,我正在研究。
无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。试图加载格式不正确的程序。
其他一些论坛谈论在 GAC 中注册 Oracle.DataAccess.dll,我很想避免这种情况——无论如何我看不出有什么区别,但我会试一试。
更新 2
在 GAC 中注册 Oracle.DataAccess.dll 库没有任何区别,我已经取消注册它。
一周工作即将结束,我必须赶火车,但我已经在这里给另一个开发团队发了电子邮件,希望他们之前已经打过这场仗(而不是像其他人一样使用夜间提取物)。
更新 3
今天早上我下载并安装了 64 位版本的 IIS Express 8.0 RC。VS2010 不支持 64 位版本,因此需要从命令行运行。这相当简单,通过查看任务管理器,我能够看到 VS 用于 iisexpress.exe *32 的命令行。
不幸的是,当我浏览由 64 位 IIS Express 托管的网站时,我收到了这个错误。
处理程序“ExtensionlessUrl-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”
这个问题太远了,所以我将尝试使用 32 位版本的 ODP.NET。
更新 4
我下载了 32 位版本的完整安装,但是当我看到 Oracle Universal Installer 时我很害怕。它看起来太 90 年代了,无法信任我珍贵的开发盒。所以我使用的是 32 位的“XCopy”客户端,这让我可以打开我网站的主页,所以参考是有效的。感谢那些提出架构不匹配 32/64 问题的人。
现在我在实例化一个新的 OracleConnection 时正在调查这个错误。
提供者与Oracle客户端版本不兼容
更新 5我想我已经做到了。
所以我下载了 32 位最新的 11g “Instant Client”,然后把它放在我的 \Dependencies 文件夹中作为解决方案主干代码库。我将此文件夹添加到 %PATH% 系统环境变量中,并将 OraOps11w.dll 文件放入其中。
最后, _oracleConnection = new OracleConnection(connectionString) 没有抛出!现在,当我开始部署到 prod 时,我需要确保桌子上有一瓶 Laphroaig。
因此,回顾一下,对于 Windows 7、64 上的 IIS Express 7.5(这是一个 32 位进程):
下载 32 位 11g “Instant Client”并将其解压缩到某个文件夹,然后将此位置添加到您的 PATH。Oci.dll 是主要的 Oracle 客户端非托管库。
下载 32 位 ODP.NET 并将其解压缩到某个文件夹。
将 OraOps11w.dll 复制到 Instant Client 所在的主文件夹(上图)。
添加指向 TNSNames.ora 文本文件所在文件夹的 TNS_ADMIN 环境变量。这就像一个 hosts 文件,将 Oracle 服务名映射到服务器主机名。
关闭并重新打开 Visual Studio 以确保选择新的环境变量,并在 ODP.NET 文件夹中添加对 Oracle.DataAccess.dll 托管程序集的引用。
应该是这样的。当您知道如何操作时,这听起来相当简单。
更新 5.1
调查下面的错误,我最初没有报告,因为我确定这是防火墙问题。我所在的公司在每个工作站上都有两个,但我只是为 Oracle 服务器打开了一个原始套接字,所以它不可能。
ORA-12541: TNS: 没有监听器