大概几年之前用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上的版本貌似还没更新。

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

  1. Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)

    一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...

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

    在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy.自己提取相关文件也有一定复杂性),另一方面相比JAVA ...

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

    .NET Oracle Developer的福音--ODP.NET Managed正式推出   在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServ ...

  4. ODP.NET Managed正式推出

    NET Oracle Developer的福音——ODP.NET Managed正式推出 在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要 ...

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

    公司服务器一直都是使用 .NET+SQLSERVER的开发方式,有个项目需要进行读取远程Oracle的需求.由于oracle 基本不会,也是一边做一遍摸索. 首先是使用工具测试是否已经联通,因为之前用 ...

  6. C#使用ODP.NET连接oracle数据库

    ODP.NET:Oracle Data Provider for .NET 分为三种: ODP.NET, Managed Driver 不需要安装oracle客户端 ODP.NET,Unmanaged ...

  7. Perl/C#连接Oracle/SQL Server和简单操作

    连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...

  8. ODP.NET Managed 相关文章收集

      一.Oracle 对.net支持的一些基础知识了解介绍. 1.早年的时候,微软自己做的有 System.Data.OracleClient. 现在已经成了过期类了.性能等都不是很好. 2.Orac ...

  9. 转:不用安装Oracle客户端,远程连接Oracle数据库

    转摘自: http://blog.sina.com.cn/s/blog_90b20fe70101az2z.html Oracle数据库安装过程较为繁琐,而且卸载更加麻烦,如果卸载不干净,下次安装Ora ...

随机推荐

  1. Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序

    XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3 兼容的程序,这些程序不仅能在个人电脑上运行,还能用在iOS. ...

  2. Kruskal 最小生成树算法

    对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...

  3. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  4. 史上最牛js

    js的功能有多强大,能做到多极致?当然前提是能用,不要搞到需要超级计算器才能运行,那不算. 今天一朋友给我介绍了这个:http://bellard.org/jslinux/ 倒腾了半天后,我只能这么感 ...

  5. New Year's resolution for 2016

    A New Year's resolution is a traditional for me to celebrate a new beginning. For the past year, I h ...

  6. MongoDB学习笔记~根据子集合里某个属性排序

    回到目录 这个问题是这样的,有一个实体dog,里面有集合属性DogHistory,它里面有一些自己的属性,其中一个是SortNum,主要用来进行排序,而且这个排序可以影响主对象,即影响dog类,这个在 ...

  7. PHP运行及语句及逻辑

    php开发网页需要存放在wamp根目录下的www文件夹中才可运行成功.同时wamp要处于运行状态.  无站点情况下打开方式:  网址栏中输入:localhost/文件名称 代码规范: 用 <?p ...

  8. Android开发学习之路-下拉刷新怎么做?

    因为最近的开发涉及到了网络读取数据,那么自然少不了的就是下拉刷新的功能,搜索的方法一般是自己去自定义ListView或者RecyclerView来重写OnTouch或者OnScroll方法来实现手势的 ...

  9. DataGrid中的常用属性

    DataGrid中的常用属性 $('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',w ...

  10. C#设计模式系列:适配器模式(Adapter)

    在实际的软件系统设计和开发中,为了完成某项工作需要购买一个第三方的库来加快开发.这带来一个问题,在应用程序中已经设计好的功能接口,与这个第三方提供的接口不一致.为了使得这些接口不兼容的类可以在一起工作 ...