不幸的是,我正在尝试使用.NET中的Oracle,这就像回到1997年.正确解释事情是一个弱点的迹象,注册表和环境变量似乎具有特色.
所以这是我有多远.
我在Oracle.com上填写了一份关于我生活的大表,然后下载了
ODBC Windows 64位实例客户端,11.2.0.3.0并将其解压缩到一个文件夹中. 基本的Windows 64位Instant Client,11.2.0.3.0并将其解压缩到与上面相同的文件夹中.
我运行了安装.exe(没有MSI,记得这是1997).
我添加了一个TNS_NAMES环境变量,指向网络共享上的公司TNSNames.ora文件,并在控制面板中设置一个快速DSN并运行测试 - 它工作正常!
然后我下载了最新的ODP.NET for .NET 4.0的XCOPY版本,并将其复制到我的源代码控制工作区下的Dependencies文件夹中.
我从我的项目添加了一个引用到Dependencies\odp.net4\odp.net\bin\4\Oracle.DataAccess.dll
我读过,我需要让管理ODP.NET东西,知道在哪里可以找到其非托管Oracle库,我猜是依赖\ 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>
Run Code Online (Sandbox Code Playgroud)
configSection中有什么内容?我在这上面找到的几个线程给出了一个例子,然后说"我不知道应该是什么类型",这是主要的一点!
任何人都可以建议我吗?有没有人知道从.NET查询Oracle视图的傻瓜指南的链接?
我能在1997年做些什么来阻止自己在2012年使用Oracle吗?
UPDATE
只是一个快速更新.我已将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)不会抛出!现在我需要确保在我部署生产时我在桌子上放了一瓶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:没有倾听者
解释该问题的最简单方法是指出Oracle客户端和ODAC客户端库之间的区别.
在64位计算机(Windows 7+)上,您需要安装64位Oracle客户端.这是您的计算机将用于连接到计算机本地部署的Oracle数据库的客户端.对于托管在Web服务器或其他终端服务器上的应用程序,规则是相同的.
诀窍是......作为开发人员,我们的机器也必须具有.Net IDE工具.Oracle有一个糟糕的命名约定,但基本上有2个部分:ODT(工具)和ODAC(数据访问).ODP.Net数据提供程序是ODAC库的一部分.
所以...回到IDE ... Visual Studio是32位,因此我们必须以32位安装上面的工具.
在开发,调试等时,VS.Net正在使用32位客户端库和数据访问库来与Oracle协同工作.
只要将此应用程序部署到计算机,它就会使用计算机上加载的任何客户端,除非针对特定平台.
这意味着如果你的目标是32并部署到64,它将会中断......反之亦然.最好的办法就是把它放在任何平台部分,简单地记住你到底在做什么:)
另外要注意的是确保您的客户端和ODAC软件包具有相同的版本...您不希望拥有11g R2客户端和11g R5 ODAC,因为一旦部署,废话就会再次中断.
需要注意的是,如果您希望在应用程序中"嵌入"oracle客户端,在这种情况下,OraOps与其他几个库一起部署在应用程序中 - 这称为Oracle的Instant Client,也是ODAC包的一部分,包括在内在他们完整的客户端包中也是如此.
Oracle很快(2013年第1季度)发布了他们的下一个ODP.Net软件包......这将是一个完全托管代码库......这意味着没有更多单独的客户端或ODAC软件包可以匹配,平台将不知道32和64位的区别......它的功能与旧的微软库一样,只有它将由oracle构建和维护,具有更强大的功能集.我只希望它能早点到达.
首先,为您对 Oracle 纯粹的热爱+1,并认识到他们是拥有最好产品的最好公司!;)
是的,下载和安装过程很荒谬。我通常甚至无法在他们的网站上找到合适的客户端下载,而且 Oracle Universal Product Installer 的情况很糟糕。
OraOps11w.dll
有时您的目录中需要一份 的副本\bin
。有时不是。我从来没有弄清楚什么时候需要它,什么时候不需要它,但我认为如果您引用的版本与安装的 Oracle 客户端Oracle.DataAccess.dll
不完全相同,那么您需要OraOps11w.dll
.
你能解释一下你想在你的配置文件中做什么吗DllPath
?Oracle 安装应该已经注册了 .NET 运行时所需的几乎所有内容machine.config
。自从我设置 ODP.NET 以来已经有一段时间了,但我不记得除了连接字符串之外,app.config 中还没有添加太多内容。
归档时间: |
|
查看次数: |
21635 次 |
最近记录: |