標籤:
前幾天有這樣一個需求,就是讓SNF平台BS版的基礎程式全面支援Oracle資料庫。
初一看這是一個很大的工程,因為大家都知道 Sql和Oracle的文法有很多的不一樣,如 top 、日期擷取、類型之間、特殊的關鍵字如sqlserver中會用到 dbo.、[]號都不行、自動成長、分頁查詢等。所以要相容在設計時就應該做處理。
那在SNF快速開發平台設計時就考慮了這個問題,所以我們花了3天的時間從沒有Oracle資料庫 現搭環境,現建立資料表空間、現建立表結構導資料,建立序列,甚至把原來用的C#串連oracle的dll庫也升級了一下。表結構的問題用工具Navicat->資料轉送功能 協助解決的,傳輸過去有一個問題就是表名和欄位名加上了””號,再第一次運行程式時發現了問題,統一進行了匯出指令碼把””去掉再執行問題。資料庫升級完後我們還需要進行程式的調整,還好架構相容和擴充性比較好,整個測試後發現 10~20處不符合需要一一進行了調整,也是滿艱辛的。
經過調整後在SNF架構下開發的時候要注意以下幾點:
- 如果需要寫sql時不要用 dbo.、[]號,
- 還有在from後的表起別名時不要用 as 只要加空格即可。要不然Oracle不相容。
- 再有就是欄位和表名大小寫問題,Sql server是不區分大小寫,在Oracle裡會把所有全表名和欄位名都變成大寫的。為了bs程式頁面調用時方便多數庫支援時統一我們做了翻譯處理。
再開發新程式時,想要利用我們的代碼產生器等工具做來的話的開發步驟如下(指BS程式):
- 在Sql Server資料庫建立表,自增主鍵也可以使用。表和欄位要把描述寫上。
- 使用SNF.CodeGenerator代碼產生器把對應的單表或多表實體、服務層、頁面等代碼產生出來。拷貝到項目對應的位置,如果有個別代碼可能需要調整。
- 把程式菜單掛上後,運行和增加個人化功能。
- 開發完成後,開始進行Oracle的移送。
a) 採用Navicat->資料轉送功能把表結構複製過去,再Navicat裡把表結構匯出去掉””號,再建立表結構。也把對應的預設值也處理一下。
b) 如果是自增長的話需要建立一個序號,序號名為“seq_表名”。這樣產生的程式碼就可以相容。
c) 還需要向BaseTranslation表增加欄位翻譯,用於翻譯Oracle大寫欄位和Sql server Pascal大小寫欄位名的問題。DataTable是不區分大小寫不用管。但在頁面綁定欄位和js取值等地都會有用。為了一次開發多資料庫支援我們需要處理。
註:翻譯後頁面使用的是Pascal大小寫欄位名。如:Id、ParentId、SortCode等。
下面SQL指令碼,作用是檢索出來所有表欄位和Pascal大小寫和全大寫欄位名稱。放到翻譯表。
Insert into BaseTranslation
select distinct [name], upper([name] ) from [syscolumns] where [id] in(
select [id] from [sysobjects] where [type] = ‘u‘
)
union
select distinct [name], upper([name] ) from WorkFlowV30. dbo.[syscolumns] where [id] in(
select [id] from WorkFlowV30.dbo .[sysobjects] where [type] = ‘u‘
)
union
select distinct [name], upper([name] ) from ProjectV30. dbo.[syscolumns] where [id] in(
select [id] from ProjectV30.dbo .[sysobjects] where [type] = ‘u‘
)
select * from BaseTranslation
再附贈一個Oracle備份與還原指令碼:
exp SYSTEM/[email protected]:1521/orcl file=d:\snf_oracle.dmp;
exp platform/[email protected]:1521/orcl file=d:\snf_oracle_platform.dmp;
王春天 2015-11-23
作者Blog:http://www.cnblogs.com/spring_wang
如果覺得還不錯,歡迎轉載。
本系列文章列表如下:
基於SNF-快速開發平台架構的系列文章:
SNF快速開發平台3.2之--.Net可擴充的單據編號產生器-SNF.CodeRule
SNF快速開發平台3.1之--審核流(3)低調奢華,簡單不凡,執行個體示範-SNF.WorkFlow
SNF快速開發平台3.1之--審核流(2)流程設計-SNF.WorkFlow功能使用說明
SNF快速開發平台3.1之--審核流(1)SNF.WorkFlow審核流簡介
SNF快速開發平台3.0之--完美的代碼產生器SNF.CodeGenerator-快速開發人員的利器
基於MVC4+EasyUI的Web開發架構--Spring.Net.FrameworkV3.0總體介紹
SNF快速開發平台3.0之--MVC 列印解決方案
SNF快速開發平台3.0之--檔案批量上傳-統一附件管理器-線上預覽檔案(有互連網和沒有兩種)
SNF快速開發平台3.0之--asp.net mvc4 強大的匯出和不需要上傳檔案的大量匯入EXCEL
SNF快速開發平台3.0之MVC通用控制項陳列庫展示-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
SNF快速開發平台3.0之BS頁面展示和九大優點-部分頁面顯示效果-Asp.net+MVC4.0+WebAPI+EasyUI +Knockout
SNF快速開發平台3.0之-介面個人化配置+10種皮膚+7種菜單-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
SNF快速開發平台3.0之-CS頁面-Asp.net+Spring.Net.Framework
SNF快速開發平台3.0之--系統裡廣播的作用--迅速及時、簡明扼要的把資訊發送給接收者
SNF平台從sql server相容oracle的處理方式和開發方式