PetaPoco利用ODP.NET Managed Driver连接Oracle
大概几年之前用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的更多相关文章
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...
- .NET Oracle Developer的福音——ODP.NET Managed正式推出
在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy.自己提取相关文件也有一定复杂性),另一方面相比JAVA ...
- .NET Oracle Developer的福音——ODP.NET Managed正式推出
.NET Oracle Developer的福音--ODP.NET Managed正式推出 在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServ ...
- ODP.NET Managed正式推出
NET Oracle Developer的福音——ODP.NET Managed正式推出 在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要 ...
- 未安装Oracle客户端的服务器上,使用ASP.NET远程连接Oracle
公司服务器一直都是使用 .NET+SQLSERVER的开发方式,有个项目需要进行读取远程Oracle的需求.由于oracle 基本不会,也是一边做一遍摸索. 首先是使用工具测试是否已经联通,因为之前用 ...
- C#使用ODP.NET连接oracle数据库
ODP.NET:Oracle Data Provider for .NET 分为三种: ODP.NET, Managed Driver 不需要安装oracle客户端 ODP.NET,Unmanaged ...
- Perl/C#连接Oracle/SQL Server和简单操作
连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...
- ODP.NET Managed 相关文章收集
一.Oracle 对.net支持的一些基础知识了解介绍. 1.早年的时候,微软自己做的有 System.Data.OracleClient. 现在已经成了过期类了.性能等都不是很好. 2.Orac ...
- 转:不用安装Oracle客户端,远程连接Oracle数据库
转摘自: http://blog.sina.com.cn/s/blog_90b20fe70101az2z.html Oracle数据库安装过程较为繁琐,而且卸载更加麻烦,如果卸载不干净,下次安装Ora ...
随机推荐
- Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序
XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3 兼容的程序,这些程序不仅能在个人电脑上运行,还能用在iOS. ...
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- 剑指Offer面试题:26.字符串的排列
一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...
- 史上最牛js
js的功能有多强大,能做到多极致?当然前提是能用,不要搞到需要超级计算器才能运行,那不算. 今天一朋友给我介绍了这个:http://bellard.org/jslinux/ 倒腾了半天后,我只能这么感 ...
- 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 ...
- MongoDB学习笔记~根据子集合里某个属性排序
回到目录 这个问题是这样的,有一个实体dog,里面有集合属性DogHistory,它里面有一些自己的属性,其中一个是SortNum,主要用来进行排序,而且这个排序可以影响主对象,即影响dog类,这个在 ...
- PHP运行及语句及逻辑
php开发网页需要存放在wamp根目录下的www文件夹中才可运行成功.同时wamp要处于运行状态. 无站点情况下打开方式: 网址栏中输入:localhost/文件名称 代码规范: 用 <?p ...
- Android开发学习之路-下拉刷新怎么做?
因为最近的开发涉及到了网络读取数据,那么自然少不了的就是下拉刷新的功能,搜索的方法一般是自己去自定义ListView或者RecyclerView来重写OnTouch或者OnScroll方法来实现手势的 ...
- DataGrid中的常用属性
DataGrid中的常用属性 $('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',w ...
- C#设计模式系列:适配器模式(Adapter)
在实际的软件系统设计和开发中,为了完成某项工作需要购买一个第三方的库来加快开发.这带来一个问题,在应用程序中已经设计好的功能接口,与这个第三方提供的接口不一致.为了使得这些接口不兼容的类可以在一起工作 ...