大概几年之前用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. International Conference for Smart Health 2015 Call for Papers

    Advancing Informatics for healthcare and healthcare applications has become an international researc ...

  2. 【腾讯Bugly干货分享】WebP原理和Android支持现状介绍

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/582939577ef9c5b708556b0d 1.背景 目前网络中图片仍然是占 ...

  3. android内部培训视频_第三节 常用控件(Button,TextView,EditText,AutocompleteTextView)

    第三节:常用控件 一.Button 需要掌握的属性: 1.可切换的背景 2.9.png使用 3.按钮点击事件 1)  onClick 3) 匿名类 4) 公共类 二.TextView 常用属性 1.a ...

  4. 代码提交的时候可以插入表情了-GitHub表情的使用

    GitHub官方有个表情项目,旨在丰富文字信息.意味着你可以在提交代码的时候,在提交信息里面添加表情,同时也可以在项目的ReadMe.md文件里面使用表情.除此之外,当然还有项目在GitHub上的wi ...

  5. HTML中em与b等的区别

    最近在学习HTML基本知识,看到b标签和strong还有em,都是表示强调目的的,那他们之间的区别是什么呢?总结如下: < b > < i > 是视觉要素(presentati ...

  6. C# Azure 存储-分布式缓存Redis在session中的配置

    1. 开始 对于分布式的缓存,平常的session的处理是一个用户对应一台分布式的机器,如果这台机器中途挂机或者不能处理这个用户session的情况发生,则此用户的session会丢失,会发生不可预知 ...

  7. 《Spark快速大数据分析》—— 第六章 Spark编程进阶

    这章讲述了Spark编程中的高级部分,比如累加器和广播等,以及分区和管道...

  8. fir.im Weekly - 让 iOS 应用更加安全

    攻易防难,关于 iOS 应用安全看起来有些神秘.iOS Security , 源于@吴发伟_则平博客翻译的关于iOS安全的一系列文章,现在站点已经系统收集了大量关于 iOS 逆向.安全.反编译.静动态 ...

  9. DataBase异常状态:Recovery Pending,Suspect,估计Recovery的剩余时间

    一,RECOVERY PENDING状态 今天修改了SQL Server的Service Account的密码,然后重启SQL Server的Service,发现有db处于Recovery Pendi ...

  10. java静态代理与动态代理

    原文链接:http://www.orlion.ga/207/ 一.代理模式 代理模式是经常用到的设计模式,代理模式是给指定对象提供代理对象.由代理对象来控制具体对象的引用. 代理模式涉及到的角色: 抽 ...