Fork me on GitHub
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

 

 

 
 
posted on 2015-04-25 22:27  HackerVirus  阅读(2405)  评论(1编辑  收藏  举报