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之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者
SNF平台从sql server兼容oracle的处理方式和开发方式的更多相关文章
- SQL Server,MySQL,Oracle三者的区别
SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...
- SQL server 与Oracle开发比较
●概念上区别 1.Oracle 是一种对象关系数据库管理系统(ORDBMS),而Sql server 只是关系型数据库管 理系统(RDBMS). 2.Oracle使用Internet文件系统,该系统基 ...
- 【转】SQL Server与Oracle的区别
转自:http://soft.chinabyte.com/database/255/12258255.shtml SQL Server与Oracle的区别 2012-02-10 00:00 中国IT实 ...
- 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务
使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务 作者:Nikolay Manchev 分步构建一个跨这些平台的 ...
- 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别
SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...
- Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决
Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...
- 关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题
在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * f ...
- Win7 64位下sql server链接oracle的方法
继上一次mysql同步sql server后,这一次需要将Oracle同步到sql server上来,方案相似,只是在sql server链接oracle的时候费了很多时间. 一.测试环境 本方案实现 ...
- sql server 向oracle导入表
选择相应的数据库,右键,任务,选择导出数据 点击下一步 选择Microsoft OLE DB Provider for Sql Server 选择下一步 目标选择.net Framework data ...
随机推荐
- JERSEY中文翻译(第三章、JAX-RS Application, Resources and Sub-Resources)
JAX-RS Application Resource and Sub-Resource 本章要介绍的是JAX-RS的核心概念——Resouce.Sub-Resource JAX-RS的2.0的jav ...
- angularjs初始化时不显示模板内容, 不显示html, 不显示template
template的内容可能在需要的数据准备好之前就显示出来了, ng-cloak可以解决这个问题 ng-cloak <div id="template1" ng-cloak& ...
- Container [pid=6263,containerID=container_1494900155967_0001_02_000001] is running beyond virtual memory limits
以Spark-Client模式运行,Spark-Submit时出现了下面的错误: User: hadoop Name: Spark Pi Application Type: SPARK Applica ...
- MVC+WCF框架下广告位管理——文件上传
广告位是站点中不可缺少的内容之中的一个.也是能直接给我们站点带来经济收益的内容之中的一个. 好的广告位不仅不会强宾压主,而会为我们的站点锦上添花.起到画龙点睛的作用.因此设计好广告位也是开发过程中一大 ...
- 每天五个java相关面试题(7)--线程篇
首先关于线程能够先看我之前这篇博文熟悉一下线程生命周期的图示以及文字说明 好開始了: 1.java 中有几种方法能够实现一个线程? 答:有两种实现方法.各自是继承 Thread类与实现Runnable ...
- 〖Linux〗使用命令行切换触摸板的状态on/off/toggle
最近发现在Ubuntu13.10中使用Fn+F9对触摸板的控制操作不灵了: 并且在黑夜.外置键盘时,按下这个组合键也很不方便,由此便想到使用命令行来切换触摸板状态: 脚本:~/bin/touchpad ...
- Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的几个问题
这次新安装了一个MySQL数据库,然后navicat连接数据库一点问题没有. 但是通过Java的jdbc连接却怎么都建立不了连接. 报如下错: 网上找了很久找到了原因: 数据库用的是Mysql8版本, ...
- 洛谷 P2335 [SDOI2005]位图
OJ检测链接:https://www.luogu.org/problem/show?pid=2335 题目描述 现在我们给出一个n*m的单色位图,且该图中至少含有一个白色的像素.我们用(i, j)来代 ...
- shell笔记-算术运算
算术运算在Bash shell环境中,可以利用let.(( ))和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.let命令可以直接执行基本的算术操作.当使用let时 ...
- SG 函数初步 HDU 1536 && HDU 1944
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1944 pid=1536"> http://acm.hdu.edu.cn/showpr ...