• 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  
    请问解决了吗?
      回复引用
    #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>
      回复引用
  • 相关阅读:
    c++ isdigit函数
    c++ swap函数
    1.2Hello, World!的大小
    1.2整型与布尔型的转换
    1.2打印ASCII码
    leetcode[170]Two Sum III
    leetcode[167]Two Sum II
    leetcode[1]Two Sum
    leetcode[2]Add Two Numbers
    leetcode[3]Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/chi0591/p/6120593.html
Copyright © 2020-2023  润新知