『片段』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

