SNF平台从sql server兼容oracle的处理方式和开发方式

前几天有这样一个需求,就是让SNF平台BS版的基础程序全面支持Oracle数据库。

初一看这是一个很大的工程,因为大家都知道 Sql和Oracle的语法有很多的不一样,如 top 、日期获取、类型之间、特殊的关键字如sqlserver中会用到 dbo.、[]号都不行、自动增长、分页查询等。所以要兼容在设计时就应该做处理。

         那在SNF快速开发平台设计时就考虑了这个问题,所以我们花了3天的时间从没有Oracle数据库 现搭环境,现创建表空间、现创建表结构导数据,创建序列,甚至把原来用的C#连接oracle的dll库也升级了一下。表结构的问题用工具Navicat->数据传输功能 帮助解决的,传输过去有一个问题就是表名和字段名加上了””号,再第一次运行程序时发现了问题,统一进行了导出脚本把””去掉再执行问题。数据库升级完后我们还需要进行程序的调整,还好框架兼容和扩展性比较好,整个测试后发现 10~20处不符合需要一一进行了调整,也是满艰辛的。

         经过调整后在SNF框架下开发的时候要注意以下几点:

  1. 如果需要写sql时不要用 dbo.、[]号,
  2. 还有在from后的表起别名时不要用 as 只要加空格即可。要不然Oracle不兼容。
  3. 再有就是字段和表名大小写问题,Sql server是不区分大小写的,在Oracle里会把所有全表名和字段名都变成大写的。为了bs程序页面调用时方便多数库支持时统一我们做了翻译处理。

再开发新程序时,想要利用我们的代码生成器等工具做来的话的开发步骤如下(指BS程序):

  1. 在Sql Server数据库创建表,自增主键也可以使用。表和字段要把描述写上。
  2. 使用SNF.CodeGenerator代码生成器把对应的单表或多表实体、服务层、页面等代码生成出来。拷贝到项目对应的位置,如果有个别代码可能需要调整。
  3. 把程序菜单挂上后,运行和增加个性化功能。
  4. 开发完成后,开始进行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/orcl@192.168.2.50:1521/orcl file=d:snf_oracle.dmp;

exp platform/platform@192.168.2.50: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之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者

原文地址:https://www.cnblogs.com/spring_wang/p/5722706.html