上篇说过了ODP的安装与配置 ,但是个人比较喜欢托管类型的,毕竟非托管类型的,因为考虑到会有用户或者是服务器或者是开发人员有32位的机器,就要强制编译平台平台为32位,只因为这个驱动,有点让人不愉快了。所以,下面主要先讲如果使用托管的驱动,非托管的,看时间吧,我估计除了重量及的ODAC,没人会选择使用非托管的代码,甚至我现在用托管的代码也都不安装,直接那个DLL,然后在CONFIG中配置一下。

那么如何从非托管驱动向托管驱动迁移呢?这个我们先来说一下。

为了方便地迁移,ODP.NET的程序接口不论是否托管,都是相同的,所以,不管你的非托管驱动用了多久,这条路你走了多远,都可以立马向托管驱动切换,而且还很简单。

在过去的版本中,托管驱动比非托管的支持更多的API,但是,现在它们俩都现实了支持最新数据库和.NET框架的特性。

驱动迁移有如下的步骤:

1、将Oracle.ManagedDataAccess.dll引用添加到.NET项目中。

2、将项目中非托管代码的引用改为托管代码的引用,即

using Oracle.DataAccess.Client;
或者
using System.Data.OracleClient;
改为:
using Oracle.ManagedDataAccess.Client;

3、一些在config文件中关于Provider的设置需要进行修改,因为ODP.NET的托管驱动支持较少的windows注册设置,而且有着稍微不一样的.NET配置格式。具体的请看上一篇中,对于ODP的配置介绍。

ODP.NET编程的重要事项

  • 不可以使用Thread.Abort方法,否则非托管的资源有可能会不被释放,从而导致内存泄露和数据损坏。

  • 如果想要更有效的使用资源,ODP.NET的对象(如OracleConnection、OracleCommand)需要及时的被关闭(closed)或释放(disposed),也可以两个操作都执行。这个操作应该在有机会的时候立即执行而不是依赖于.NET自己的垃圾收集(GC)清理资源的时候来处理。许多用户发现,在高并发的情况下,及时的关闭与释放ODP对象,可以十分有效的降低ODP对系统资源的使用。

  • 当遇到由于内存损坏而出现的异常(如:AccessViolationException,Runtime.InteropServices.SEHException)时请勿让程序继续执行,注意是整个应用程序应该停止。

  • 如果注册表HKEY_LOCAL_MACHINE\Software\Oracle\NLS_LANG的值设置为NA,那么ODP.NET会遇到ORA-12705的错误,删除掉这个对象即可解决问题。

Oracle Data Provider for .NET的使用(二)-驱动更换与注意事项的更多相关文章

  1. Oracle Data Provider for .NET 的使用经验

    原文:Oracle Data Provider for .NET 的使用经验 Oracle Data Provider for .NET 是Oracle提供的基于Ado.net接口的一个开发包.    ...

  2. Oracle Data Provider for .NET now on NuGet

    Oracle Data Provider for .NET now on NuGet 时间 2015-03-02 22:30:00  Oracle Bloggers原文  http://cshay.b ...

  3. Oracle Data Provider for .NET Support for Microsoft .NET Core

    Oracle Data Provider for .NET Support for Microsoft .NET Core的官方地址,记录下来,按照官方描述,会在2017年底左右发布,暂时还没有看到相 ...

  4. Oracle Data Provider for .NET的使用(托管与非托管(一))

    目录 简单的概述 简单的使用 非托管系统要求 托管驱动系统要求 其它的注意事项 ODP.NET版本说明 安装ODP.NET 安装非托管驱动 非托管驱动绿色配置 简单的概述 ODP.NET的含义是 Or ...

  5. 通过NuGet安装和配置ODP.NET(Oracle Data Provider for .NET)

    前言 本文涉及ODP.NET.ODP.NET的托管(managed)驱动.Entity Framework的托管驱动 这三部分的下载.安装.配置. 1.简介 NuGet 是.NET的软件开发包管理工具 ...

  6. Oracle Data Provider for .NET的使用(三)-ORACLE与.NET类型对应关系

    想来这个是最重要的事情了,因为多数情况下,我们使用dbhelper来调用数据库的时候,是因为如下三个地方导致错误: 1.错误的sql语句:末尾多了分号,少了部分关键字 2.sql中的参数与parame ...

  7. Oracle Data Provider for .NET

    官方地址: http://www.oracle.com/technetwork/topics/dotnet/index-085163.html 终于有正式版了.不用装客户端,又小,确实好.

  8. Oracle Data Provider for .Net classes文档

    官方文档详见:https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/odpnt/odp-dot-n ...

  9. Oracle Data Provider for .NET – Microsoft .NET Core and Entity Framework Core

    http://www.oracle.com/technetwork/topics/dotnet/tech-info/odpnet-dotnet-ef-core-sod-4395108.pdf Orac ...

随机推荐

  1. 通过PHP current()函数获取未知字符键名数组第一个元素的值

    在开发中经常遇到这样问题,获取数组第一个元素的值,如果是数字索引那还好,直接$array[0],如果键名是字符串,你又未知这个字符串呢?用current()函数就可以做到. 当然,你可以用array_ ...

  2. 【Linux】CentOS7上rpm命令批量卸载删除模糊rpm包名

    例如,我要删除如下文件名匹配上wine的所有文件

  3. 十步完全理解 SQL

    很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...

  4. 【Hadoop】Hadoop MR 自定义排序

    1.概念 2.代码示例 FlowSort package com.ares.hadoop.mr.flowsort; import java.io.IOException; import org.apa ...

  5. Angularjs中的拦截器 (卧槽,好牛逼)

    $httpAngularJS 的 $http 服务允许我们通过发送 HTTP 请求方式与后台进行通信.在某些情况下,我们希望可以俘获所有的请求,并且在将其发送到服务端之前进行操作.还有一些情况是,我们 ...

  6. zoj 3882 Help Bob(zoj 2015年7月月赛)

    Help Bob Time Limit: 2 Seconds      Memory Limit: 65536 KB There is a game very popular in ZJU at pr ...

  7. node-表单验证

    var http = require('http'); var url = require('url'); var fs = require('fs'); var querystring = requ ...

  8. 页面加载后累加,自加1&&判断数字是否为两位数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. const 使用方法具体解释

    const使用方法具体解释 面向对象是C++的重要特性.  可是c++在c的基础上新添加的几点优化也是非常耀眼的 就const直接能够代替c中的#define 下面几点非常重要,学不好后果也也非常严重 ...

  10. document.querySelector()与document.querySelectorAll()

      document.querySelector()与document.querySelectorAll() CreationTime--2018年7月1日10点49分 Author:Marydon ...