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 ...
随机推荐
- vasa构架
- 1052: 旋转单词(words)
#include <iostream> #include <iomanip> #include <cstdlib> #include <string> ...
- tcp线程聊天
.ServerThread package serverclient; import java.io.BufferedReader; import java.io.InputStreamReader; ...
- MySQL事物系列:3:innodb_flush_log_at_trx_commit小实验
1:创建表和存储过程 mysql> create database trx; Query OK, 1 row affected (0.02 sec) mysql> USE trx Data ...
- JavaScript中如何检测一个变量是一个String类型?请写出函数实现
方法1. function isString(obj){ return typeof(obj) === "string"? true: false; // returntypeof ...
- JVM类加载机制与对象的生命周期
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6536048.html 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最 ...
- 让span对宽度有响应而且兼容多种浏览器
span {display:-moz-inline-box; display:inline-block; width:20px;height:20px;}
- Java ConcurrentHashMap (Java代码实战-005)
package Threads; import com.google.common.collect.Maps; import java.util.concurrent.ConcurrentMap; i ...
- Spring MVC 零配置 / Spring MVC JavaConfig
1. Spring MVC的核心就是DispatcherServlet类,Spring MVC处理请求的流程如下图所示: 2. Spring MVC中典型的上下文层次 当我们初始化一个Dispatch ...
- 解码url参数的lotusscript函数
在Domino的系统开发过程中,我们往往要通过url来进行传参,传递参数给表单或者代理,假如浏览器请求的url带有参数,在交给服务器前服务器会对其进行编码(不知道这样理解对不对),像一些特殊符号,空格 ...