SNF平台从sql server兼容oracle的处理方式和开发方式
前几天有这样一个需求,就是让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/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之--文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)
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之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者
作者: 王春天 出处: http://www.cnblogs.com/spring_wang/ Email: spring_best@yeah.net QQ交流:903639067
QQ群:322581894 关于作者: 大连天翼信息科技有限公司 技术总监。 SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。 专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。 如有问题或建议,请多多赐教! 本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。