zoukankan      html  css  js  c++  java
  • OracleHelper

    『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬

    >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废。

    >要链接 Oracle 服务器,必须在 本机安装 Oracle 客户端 —— 而 SQLServer 不需要安装客户端。 

          win32_11gR2_client.zip(652M)

          win64_11gR2_client.zip(587M) 

    >Oracle.DataAccess.dll—— Oracle 官方 提供的.Net 程序集【在安装目录 ODP.NET 中】。

          Oracle.DataAccess.dll  严格区分 x32、x64 —— 程序集 不是 AnyCPU。

          x32 客户端 只包括 x32 的 Oracle.DataAccess.dll。

          x64 客户端 只包括 x64 的 Oracle.DataAccess.dll。

           发布程序的时候,就很容易在这个地方 出现问题。

    >Oracle.ManagedDataAccess.dll —— Oracle 官方 提供的.Net  程序集

           支持 AnyCPU

           不需要安装 600M 的客户端

          Oracle.ManagedDataAccess —— 你值得拥有。

    >Oracle.DataAccess.dll  和  Oracle.ManagedDataAccess.dll  用法完全一样。

          支持的 SQL脚本语法一样。

          SQL 脚本 不能以 分号 结尾。

          一样的:这也不支持,那也不支持。

     

     

      

    C# 调用 Oracle 语法限制

          >Oracle 不支持 自增主键 —— 自增主键 需要使用 触发器。

          >Oracle 表名,字段名 不能超过30个字符。

          >脚本 参数化,    关键符为 : —— SQLServer 关键符为 @

          >脚本 名称区域, 关键符为 "表名"."字段名" —— SQLServer 关键符为 [表名].[字段名]

               警告:脚本中 不建议 将 数据库名、表名、字段名 用 引号括起来 —— 后果很严重。

     

          >支持 多条 修改语句 同时执行:

    复制代码
              BEGIN
    
                 UPDATE TB_Test SET Name='INK';
    
                 DELETE TB_Test WHERE Name='INK';
    
                 INSERT INTO TB_Test(Name) VALUES('INK');
    
              END;
    复制代码

           >不支持 多条 查询语句,得到 DataSet —— 支持 单一查询得到 DataSet。

           >支持 ExecuteScalar —— 但是 执行脚本 必须是 单条脚本。

           >不支持 插入&查询 自增列—— SQLServer 支持 INSERT INTO…. SELECT@@IDENTITY

               警告:即使使用 触发器 实现 自增ID,以下语法也 无法执行

    复制代码
              BEGIN
    
                 INSERT INTO TB_Test(Name) VALUES('INK');   --先执行 插入
    
                 SELECT MAX(ID) FROMTB_Test;                --再执行 查询 最大ID
    
              END
    复制代码

     

    C# 调用 Oracle 的死结 在于:不支持 多条 非影响SQL脚本同时执行。

     

    有鉴于此,自己随手写了一个OracleHelper.cs

           >之前 Oracle 脚本, 自然是 支持的。

           >多条 Oracle 脚本,用 ; 分割 —— 即能支持 多条SQL脚本。

              >避开了 SQLServer 迁移 Oracle 过程中,出现的脚本不兼容。

              >多条SQL脚本将自动开启 数据库事务,确保 绝对正确。

              >支持 多条SELECT返回 多DataTable的 DataSet。

              >支持 插入&查询自增列(触发器实现的 自增列) 

     

    Oracle 全托管程序集 Oracle.ManagedDataAccess.dll  

              >不再需要安装 600M 的客户端,只需要 单纯引用程序集 就行。

              >Oracle.ManagedDataAccess.dll  只是简化了 安装部署,支持 AnyCPU。

              >测试通过,但是 功能和 Oracle.DataAccess.dll 功能一样:

     

                      

     

     

    我这次死定了 

          >近来 公司的项目 SQLServer  要 改写 Oracle。

          >但是 很多 SQLServer 的 语法 移植到 Oracle 很纠结,如果 多条SQL 都转换成 存储过程 —— 这工作量 太大,而且 存储过程数目都会 报表。

          >为了 让 SQLServer 语法 兼容到 Oracle  才在工作中 花了 两小时 写了这个 OracleHelper.cs

          >我只是一个 Oracle 的 采购,我只是 看了 http://www.cnblogs.com/dusmos/p/4451456.html 这篇文章之后,出于 探讨学习 的态度 发出来的 —— 文章也只是用的 很普通的前缀 『片段』

          >这篇文章 上了 博客园的首页,我一点准备都没有 —— 我这浅薄的 Oracle 功底,根本经不起考验,更经不起 博客园园友 潮水般 的 狂批猛踩。

          >这次,我死定了。。。。

             

     

     

    代码如下:

     View Code
     
     
  • 相关阅读:
    storm中的Scheduler
    开启flume的远程调试功能
    修改flume源码,使其HTTPSource具备访问路径功能
    非功能测试——效率测试
    python100例
    awk命令
    shell正则表达式
    python的垃圾回收机制
    冯-诺伊曼体系结构
    jmeter读取文件内容做变量
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4456870.html
Copyright © 2011-2022 走看看