关于数据库兼容问题的解决方案

关于使用企业库出现的数据库部分语法不兼容问题的解决方案一、SQLserver、Access和Oracle的语法差别1、取当前系统时间A:SelectNow()S:SelectGetdate()O:SelectSysdatefromDual2、连接字符串A:S:+O:||3、字符串函数(截取字符串、大写、小写、查找字符串位置)A:Mid、UCase、LCase、InStrS:SubString、Upper、Lower、CharIndexO:SubStr、Upper、Lower、InStr4、判断取值语句A:IIFS:CaseWhenThenO:Decode5、时间字段A:要用#号分隔,或者转换为日期SELECT*fromBooksWHERERegDate=#2007-5-1#或SELECT*fromBooksWHERERegDate=CDate(’2007-5-1′)S:可以直接用''SELECT*fromBooksWHERERegDate=‘2007-5-1′O:To_DateSELECT*fromBooksWHERERegDate=To_Date('2007-05-01','yyyy-mm-dd')6、数据类型转换A:CStr,CInt,CDateS:Convert,CASTO:To_Char,To_Number,To_Date7、InserInto…..Select…from语句InsertIntoa(ii,jj,kk)(Selectii,jj,kkfromb)这样的语句,在SQLServer以及Oracle中都不会有错,但在Access中会报:INSERTINTO语句的语法错误。Access应该把后面Select语句的括号去掉,如下:InsertIntoa(ii,jj,kk)Selectii,jj,kkfromb同时这样写在SQLServer和Oracle中都不会有错8、关键字有些字母在Access,SQLServer中是关键字,需要用[]界定可解决问题,例如:at,name9、别名SQLServer和Oracle中字段起别名时as可以省略,Access不能10、表名前缀Select*,1fromA这样的语句在Access,SQLServer中不会有错,但在Oracle中是不行的,必须要写成这样:SelectA.*,1fromA11、如果语句中有:(冒号),例如有时间字段的查询:CalcDate=#2008-05-0111:00:00#,在Access中一般会出现如下错误:不正常地定义参数对象。提供了不一致或不完整的信息。将相应Query的ParamCheck设为False即可。12、Access中的逻辑值在库中为-1和0,而SQLServer中为1和0,所以写BoolField=1这样的语句有兼容性问题。还有部分语句执行的不同,不再一一罗列。二、解决方案方案一:(可以以企业库为基础)1、定义一个参数,标识数据库种类publicenumDataBaseType{Access,SQLServer,Oracle}2、数据库连接方式和常用函数的区分if(DatabaseType==SQLServer){ConnStr=SQLserver数据库名FY_True="1"FY_False="0"FY_Now="GetDate()"FY_OrderType="desc"FY_DatePart_W="ww"FY_DatePart_H="hh"}elseif(DatabaseType==Access){ConnStr=Access数据库名称FY_True="True"FY_False="False"FY_Now="Now()"FY_OrderType="asc"FY_DatePart_W="'ww'"FY_DatePart_H="'h'"}else(DatabaseType==Oracle){---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---…………FY_Now=”sysdatefromdual”……….//与以上类似}将SQLServer、ACCESS和Oracle常用的语句进行变量赋值。这样做的好处就是后面使用相关内容的时候可以直接使用调用变量的方法,而不再需要进行数据库类型的判断。例如获取系统时间:“select”+FY_Now这样就免去了数据库的判别,减少了代码量和实用性。3、用自定义的变量参与SQL语句的构造4、根据数据库的不同执行SQL语句5、在必要的时候放弃兼容性的追求,采用不同数据库不同代码if(DatabaseType==SQLServer){MSSQL数据库时使用的代码}elseif(DatabaseType==Access){ACCESS数据库时使用的代码}else(DatabaseType==Oracle){Orcale数据库时使用的代码}这样就可以保证程序的高效性以及稳定性。这也是整个程序的兼容性的一种。个人意见:这种方式可以在企业库的基础上使用,工作量相对较小,主要工作量会集中在SQLServer、Access和Oracle不同语法的重新统一定义,以及部分特殊SQL语句的单独处理。不过这种方式如果要更换或是新增其他的数据库种类,程序的更改可能比较分散,不太好处理,也就是扩展性不好。方案二:(不使用企业库)1、定义一个参数,标识数据库种类publicenumDataBaseType{Access,SQLServer,Oracle}2、定义接口,统一数据库的操作publicinterfaceIDBAccess{voidInit(stringstrServer,stringstrDataBase,stringstrUser,stringstrPwd);voidOpen();voidClose();boolTestConn();intRunNoQuery(string...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?