PetaPoco利用ODP.NET Managed Driver连接Oracle

以下内容来源自,只是为了方便查询转载过来:

http://www.cnblogs.com/yanxiaodi/p/5038387.html

大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦。调试好环境后,一直到项目结束都不敢重装系统。最近又有一个需求需要读取oracle,可是环境已经没了……

再重新配置吧,先使用nuget下载安装了PetaPoco,没想到最新的版本变动比较大,貌似缺少几个类,时间紧急没时间折腾了,于是下载了一个旧版5.0.1。但是实在不想安装oracle client那么肥的东西,就想使用Oracle.DataAccess.dll来直接访问。

在App.config文件里添加数据库字符串:


<connectionStrings>

<add name="MyDbContext"

connectionString="Data Source=(DESCRIPTION=

(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME=ORCL)));

User Id=scott;Password=xxx;"

providerName="Oracle.DataAccess.Client"                />

</connectionStrings>

修改T4模板Database.tt的以下几个地方:


ConnectionStringName = "MyDbContext";            // Uses last connection string in config if not specified

Namespace = "Domain.Models";

RepoName = "MyDbContext";

保存,毫无疑问的报错了:


// -----------------------------------------------------------------------------------------

// Failed to load provider `Oracle.DataAccess.Client` - 找不到请求的 .Net Framework Data Provider。可能没有安装。

// -----------------------------------------------------------------------------------------

肯定还是驱动没装好,在搜索解决办法的时候,找到这两篇文章:

.NET Oracle Developer的福音——ODP.NET Managed正式推出

Oracle:ODP.NET Managed 小试牛刀

原来Oracle已经推出了可托管的驱动,而且不区分32位还是64位了,这样应该就更方便了。Oracle官网上的下载简直要恶心死人。于是按照说明从nuget里搜索odp.net.managed:

安装后修改数据库连接字符串的provider:


providerName="Oracle.ManagedDataAccess.Client"

又报错了,还是相同的错误,找不到Oracle.ManagedDataAccess.Client这个驱动:


// -----------------------------------------------------------------------------------------

// Failed to load provider `Oracle.ManagedDataAccess.Client` - 找不到请求的 .Net Framework Data Provider。可能没有安装。

// -----------------------------------------------------------------------------------------

看来直接安装nuget还是不行啊,还是得老老实实上官网下,找到这个页面:

http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

一堆啊!!!下哪个啊???

我下的是这个:

解压缩之后里面有几个文件夹和dll,dll我们已经通过nuget安装了就不管了,里面有一个install_odpm.bat,看来是得安装一下了。直接运行,刷一下就没了,再运行还是刷一下就没了。

那就先开cmd吧。运行cmd找到这个bat,运行一下:

原来是不能直接运行的,还要加参数。按照第三种方式运行,又报错了:

看来需要启用管理员权限,使用管理员模式运行cmd,终于可以成功了。

打开这个bat可以看到其实就是copy了几个文件到系统目录,自动添加了tnsnames.ora这些文件。

再运行一下Database.tt,这次就报其他的错了:


// -----------------------------------------------------------------------------------------

// Failed to read database schema - ‘ user id‘ 是无效的连接字符串属性

// -----------------------------------------------------------------------------------------

看来驱动已经正常加载上了。那为什么报这个错呢?

找了半天原因,原来是数据库连接字符串不能有换行!否则PetaPoco的T4模板就读不到了……

还有,oracle官网最新的版本已经是12.1.0.2.4了,nuget上的版本貌似还没更新。

评论:

#1楼 2016-06-13 12:20 | Marksion

请问解决了吗?

支持(0)反对(0)

回复引用

#2楼 2016-11-17 12:34 | Leaf.Duan

其实就是要配置 config 的 DbProviderFactories 就好了。一般 web 项目,修改 web.config 的配置就好了,当然可以修改 machine.config ,这个是全局的,配置好了其他所有项目都不用配置了。
发现这个配置还有一个好处,就是项目可以不用直接依赖各个 data driver 的 dll,比如 NHibernate,支持那么多数据库,但它本身没有依赖那些 dll,而是用的 DbProviderFactory。
参考一下我的配置(web.config):


1

2

3

4

5

6

7

8

<system.data>

    <DbProviderFactories>

      <remove invariant="Npgsql" />

      <add name="PostgreSQL Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=3.1.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />

      <remove invariant="Oracle.ManagedDataAccess.Client" />

      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

    </DbProviderFactories>

  </system.data>

支持(0)反对(0)

回复引用

时间: 2024-10-06 19:10:42

PetaPoco利用ODP.NET Managed Driver连接Oracle的相关文章

DbVisualizer的Driver连接Oracle Thin选项不可选

在Tools中选择Driver Manager 找到要选择的Oracle项,右下方选择User Specified,打开文件夹添加一个Oracle的jar包即可 原文地址:https://www.cnblogs.com/fengnan/p/9759215.html

未安装Oracle客户端的服务器上,使用ASP.NET远程连接Oracle

公司服务器一直都是使用 .NET+SQLSERVER的开发方式,有个项目需要进行读取远程Oracle的需求.由于oracle 基本不会,也是一边做一遍摸索. 首先是使用工具测试是否已经联通,因为之前用mysql时都是用的Navicat,所以直接在网上下载了Navicat for Oracle,但是死活都连不上,报试过网上所有的方法,下载inistallclient ,修改OCI,加入环境变量,新建tnsnames.ora都没用,一直是Cannot load OCI DLL,126错误,也试过把N

C# 连接Oracle ,免安装客户端

在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy.自己提取相关文件也有一定复杂性),另一方面相比JAVA平台不如JDBC方便快捷,特别是一些刚接触Oracle的小伙伴,面临配置tns.ora.OraHome等等多少有些畏难情绪. 初始庐山 现在,这一切都即将成为过去啦.继早些时候Oracle官方推出的ODP.NET Managed的Beta版之后,最近的版本已经跟随12c一起发布了,可以  DLL h

PLSQL Developer工具远程连接Oracle数据库的方法

Oracle数据库安装过程较为繁琐,而且卸载更加麻烦,如果卸载不干净,下次安装Oracle就不会成功.下面就为大家介绍一种不用安装Oracle客户端而利用PLSQL Developer工具远程连接Oracle数据库的方法. 首先需要在Oracle官网上下载这个软件:instantclient-basic-win32. 然后解压,打开这个文件,在里面新建一个文件:NETWORK,在NETWORK中新建一个文件夹:ADMIN,在ADMIN中新建一个文件:tnsnames.ora.在tnsnames.

Oracle:ODP.NET Managed 小试牛刀 (转)

“ODP.NET Managed”发布已经有一段时间了,近期正好有一个新项目,想尝试用一下,参考园子里的文章:<.NET Oracle Developer的福音——ODP.NET Managed正式推出> 到Oracle官网 下载 ODP.NET_Managed121010.zip 大约1.9M,解压后目录结构如下: 核心的dll,就是common目录下的Oracle.ManagedDataAccess.dll,不象ODP.NET以前的版本,这次终于不用区分x86/x64版本了,不管是32位还

Oracle:ODP.NET Managed 小试牛刀

From:http://www.cnblogs.com/yjmyzz/archive/2013/11/01/3400999.html “ODP.NET Managed”发布已经有一段时间了,近期正好有一个新项目,想尝试用一下,参考园子里的文章:<.NET Oracle Developer的福音——ODP.NET Managed正式推出> 到Oracle官网 下载 ODP.NET_Managed121010.zip 大约1.9M,解压后目录结构如下: 核心的dll,就是common目录下的Ora

安装ODP.NE后,服务器上原有程序无法连接ORACLE 11G,报ORC-12154

问题分析: 1.安装了ODP.NET后出的问题: 2.具体表现为D:\app\Administrator\product\11.2.0下面多了一个文件夹 2.1.1.D:\app\Administrator\product\11.2.0\client_2 解决方法: 1.将D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 下面的配置文件,copy到 D:\app\Administrator\product\11.2.0\clie

64位程序,利用ADO连接Oracle数据库

刚好手头项目解决了ADO连接Oracle数据库的问题,记录下来,防止忘记. 项目情况:用32位环境完成算法动态库,结果后来需要升级到64位环境,由64位的软件来调用,则在64位设置下生成算法动态库,发现数据库连接失败.数据库使用的是Oracle10,而连接技术使用的是比较熟悉的ADO. 1.首先怀疑的是ADO预编译所引用的msado15.dll版本问题,找来了64位msado15.dll,一样重现问题. 2.怀疑是连接语句依靠的\network\admin\tnsnames.ora文件不对,所以

.NET连接Oracle的方法

方式1:直接利用.NET的oracle驱动连接 引用System.data.oracleclient; using System.data.oracleclient; string oradb = "Data Source=water;User Id=modis;Password=modis;Integrated Security=no"; OracleConnection conn = new OracleConnection(oradb); conn.Open();     方式2