很遗憾,我想从 .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 压缩并解压到与上面相同的文件夹中。
我运行了安装 .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。64位版本不受VS2010支持,因此需要从命令行运行。这很简单,通过查看任务管理器,我能够看到VS用于iisexpress.exe *32的命令行。
不幸的是,当浏览由64位IIS Express托管的我的网站时,我遇到了这个错误:
处理程序“ExtensionlessUrl-Integrated-4.0”在其模块列表中具有错误模块“ManagedPipelineHandler”
这也是该线索的一个问题,所以我将尝试使用32位版本的ODP.NET。
更新4
我下载了完整的32位版本安装程序,但是当我看到Oracle通用安装程序时,我感到恐慌。它看起来太90年代了,无法信任我的宝贵开发框。因此,我正在使用32位“XCopy”客户端,这使我能够启动我的网站首页,因此参考文献正在工作。感谢那些建议体系结构不匹配32/64问题的人。
现在我正在研究实例化新的OracleConnection时出现的错误。
提供程序与Oracle客户端版本不兼容
更新5我想我做到了。
我下载了32位的最新11g "Instant Client",并将其放在解决方案主干代码的\Dependencies文件夹中。我将此文件夹添加到%PATH%系统环境变量中,并将OraOps11w.dll文件放入其中。
最后,_oracleConnection = new OracleConnection(connectionString)没有抛出异常!现在我需要确保在部署到生产环境时桌子上有一瓶拉弗洛伊格威士忌。
因此,对于在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:no listener