




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于使用企业库出现的数据库部分语法不兼容问题的解决方案一、 SQL server、Access和Oracle的语法差别1、取当前系统时间A:Select Now()S:Select Getdate()O:Select Sysdate from Dual2、连接字符串A:&S:+O:|3、字符串函数(截取字符串、大写、小写、查找字符串位置)A:Mid、UCase、LCase、InStrS:SubString、Upper、Lower、CharIndexO:SubStr、Upper、Lower、InStr4、判断取值语句A:IIFS:Case When ThenO:Decode5、时间字段A:要用#号分隔,或者转换为日期SELECT * from Books WHERE RegDate = #2007-5-1# 或SELECT * from Books WHERE RegDate = CDate(2007-5-1)S:可以直接用SELECT * from Books WHERE RegDate = 2007-5-1O:To_DateSELECT * from Books WHERE RegDate=To_Date(2007-05-01,yyyy-mm-dd)6、数据类型转换A:CStr,CInt,CDateS:Convert,CASTO:To_Char,To_Number,To_Date7、Inser Into .Select from 语句Insert Into a(ii,jj,kk) (Select ii,jj,kk from b)这样的语句,在SQL Server以及Oracle中都不会有错,但在Access中会报:INSERT INTO 语句的语法错误。Access应该把后面Select语句的括号去掉,如下:Insert Into a(ii,jj,kk) Select ii,jj,kk from b同时这样写在SQL Server和Oracle中都不会有错8、关键字有些字母在Access,SQL Server中是关键字,需要用 界定可解决问题,例如:at,name9、别名SQL Server和Oracle中字段起别名时as可以省略,Access不能10、表名前缀Select *,1 from A这样的语句在Access,SQL Server中不会有错,但在Oracle中是不行的,必须要写成这样:Select A.*,1 from A11、如果语句中有:(冒号),例如有时间字段的查询:CalcDate=#2008-05-01 11:00:00#,在Access中一般会出现如下错误:不正常地定义参数对象。提供了不一致或不完整的信息。将相应Query的ParamCheck 设为False即可。12、Access中的逻辑值在库中为-1和0,而SQL Server中为1和0,所以写BoolField = 1这样的语句有兼容性问题。还有部分语句执行的不同,不再一一罗列。二、 解决方案方案一:(可以以企业库为基础)1、 定义一个参数,标识数据库种类public enum DataBaseType Access, SQLServer, Oracle 2、 数据库连接方式和常用函数的区分if (DatabaseType = = SQLServer )ConnStr = SQL server数据库名 FY_True = 1 FY_False = 0 FY_Now = GetDate() FY_OrderType = desc FY_DatePart_W = ww FY_DatePart_H = hhelseif (DatabaseType = = Access ) ConnStr= Access数据库名称 FY_True = True FY_False = False FY_Now = Now() FY_OrderType = asc FY_DatePart_W = ww FY_DatePart_H = helse (DatabaseType = = Oracle)FY_Now =” sysdate from dual” ./与以上类似将SQL Server、ACCESS和Oracle常用的语句进行变量赋值。这样做的好处就是后面使用相关内容的时候可以直接使用调用变量的方法,而不再需要进行数据库类型的判断。例如获取系统时间:“select”+ FY_Now这样就免去了数据库的判别,减少了代码量和实用性。3、 用自定义的变量参与SQL语句的构造4、 根据数据库的不同执行SQL语句5、 在必要的时候放弃兼容性的追求,采用不同数据库不同代码if (DatabaseType = = SQLServer)MSSQL数据库时使用的代码elseif (DatabaseType = = Access )ACCESS数据库时使用的代码else (DatabaseType = = Oracle) Orcale数据库时使用的代码 这样就可以保证程序的高效性以及稳定性。这也是整个程序的兼容性的一种。 个人意见:这种方式可以在企业库的基础上使用,工作量相对较小,主要工作量会集中在SQL Server、Access和Oracle不同语法的重新统一定义,以及部分特殊SQL语句的单独处理。不过这种方式如果要更换或是新增其他的数据库种类,程序的更改可能比较分散,不太好处理,也就是扩展性不好。方案二:(不使用企业库)1、 定义一个参数,标识数据库种类public enum DataBaseType Access, SQLServer, Oracle 2、 定义接口,统一数据库的操作public interface IDBAccess void Init(string strServer, string strDataBase, string strUser, string strPwd); void Open(); void Close(); bool TestConn(); int RunNoQuery(string strCmd); DataTable RunQuery(string strCmd); DBType DBType get; int GetFiledMax(string strTable, string strField); DataTable Tables get; DataTable GetColumns(); DataTable GetColumns(string strTable); 3、 定义抽象数据库类private abstract class DBAccess : IDBAccess protected DbConnection m_oConn = null; protected const string CON_strServer = Server; protected const string CON_strDataBase = Data Source; protected const string CON_strUser = UID; protected const string CON_strPwd = PWD; protected const string CON_strConnTimeOut = Connect Timeout = 2; private DBType m_eDBType = DBType.Access; protected DBAccess(DBType type) this.m_eDBType = type; public DBType DBType get return this.m_eDBType; /其他public abstract DataTable Tables . get; public abstract DataTable GetColumns();public abstract DataTable GetColumns(string strTable);protected abstract void InitConn(string strServer, string strDataBase, string strUser, string strPwd);protected abstract DbCommand GetCmd(string strCmd); protected abstract DbDataAdapter DbAdp get;4、 实现具体的类 private class SQL : DBAccess public SQL(DBType type) : base(type) /其他方法实现 5、 以统一的方式创建连接public static class DBAccessFactory public static IDBAccess Create(DBType type) IDBAccess IRet = null; switch (type) case DBType.Access: IRet = new Access(type
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度蔬菜配送与农业产业化联合体合同
- 2025版蔬菜种植与乡村旅游融合发展合同
- 2025年五星级酒店店面租赁与客户数据分析合同
- 2025版石灰石矿开采与加工技术咨询服务合同
- 2025年度家电销售代理合同范本
- 2025年历史建筑吊顶修复与保护合同
- 2025年办公室文员团队协作与项目管理合同范本
- 2025年度办公室装修工程结算审计合同范本
- 2025版智慧农业项目合作协议
- 2025年度汽车电子元器件批发合作协议
- 《WPS AI智能办公应用大全》全套教学课件
- 新疆疫苗管理办法
- 生产策划管理办法
- 2025年重庆出租车资格证区域考试题库区域考试
- 低氯血症护理查房
- 虫害外包服务商管理制度
- 医疗废物监督管理课件
- 2025年党章党规党纪知识竞赛题库附含答案
- 钢材应收账款管理办法
- 乙二醇加氢精制催化剂:制备工艺、性能优化与应用前景探究
- 中式烹调师基础知识课件
评论
0/150
提交评论