您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

如何提高MSSQL和ACCESS的兼容性

添加时间:2014-12-14 16:36:00  添加: 思海网络 

大家都知道ASP当中,最常用到的是ACCESS和MSSQL两个数据库。很多程序都想开发成两个数据库都可以使用的模式,但是碍于两个数据库得一些SQL语句不一致,所以导致很多程序都分两个没有必要的版本,就是ACCESS和MSSQL版!而事实上,我们可以通过对代码判断和识别,控制整个程序的兼容性。

也就是说,将两个版本兼容成一个系统。例如我的ASP飞云小说系统,就是两种数据库都可以运作的程序。

那么,到底如何让程序存在数据库兼容性并且得到高效的运作呢。下边我将以我的飞云小说系统做范例,说说我的一些控制方法和代码。

首先,我们要控制一个参数,让程序知道我们现在运作的是什么数据库。

如:飞云小说程序中的Config.asp文件参数

以下为引用的内容:
Const SystemDatabaseType = "ACCESS"      '系统数据库类型,"SQL"为MSSQL 2000/2005数据库,"ACCESS"为MS ACCESS 2000数据库

这是兼容性开始的基础,是整个程序数据库的判别。所以是非常有必要设置这么一个参数的。

第二,数据库连接方式和常用函数的区分

在我的程序当中,Conn.asp里边还存在下边的一段代码:

代码:

If SystemDatabaseType = "SQL" Then
        ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlHostIP & ";"
        FY_True = "1"
        FY_False = "0"
        FY_Now = "GetDate()"
        FY_OrderType = " desc"
        FY_DatePart_D = "d"
        FY_DatePart_Y = "yyyy"
        FY_DatePart_M = "m"
        FY_DatePart_W = "ww"
        FY_DatePart_H = "hh"
Else    
        ConnStr= "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(mdb)
        FY_True = "True"
        FY_False = "False"
        FY_Now = "Now()"
        FY_OrderType = " asc"
        FY_DatePart_D = "'d'"
        FY_DatePart_Y = "'yyyy'"
        FY_DatePart_M = "'m'"
        FY_DatePart_W = "'ww'"
        FY_DatePart_H = "'h'"
End If
 

这个代码,除了区别数据库连接方式之后,还将MSSQL和ACCESS常用的语句进行变量赋值。这样做的好处就是后面使用相关内容的时候可以直接使用调用变量的方法,而不再需要进行数据库类型的判断。

例如对比时间的datediff函数问题上:

代码:
"Select * From [表] where datediff('"&FY_DatePart_D&",数据库时间,'变量名)=0 Order By id Desc"

这样就免去了数据库的判别,减少了代码量和实用性。

第三,正确使用兼容性代码,而不使用特色代码。

很多人在写MSSQL数据库的是很,都很喜欢使用conn.execute语句,而不使用open方式。虽然在速度上,很多时间conn.execute会比open方式要高速度一点。但是这不是一概而论的。

比如说,在一个判断是否已经存在的过程算法当中。如果你已经使用了open进行了BOF或EOF的判断,那么你还要使用conn.execute进行判断的话,那速度,肯定是不如在OPEN直接修改的好。

而且,在代码当中open方式的兼容性,远远要高过conn.execute。例如时间函数now()的使用上.(这个函数在ACCESS和MSSQL的区别,大家自己去百度)

第四,在追求兼容性的情况下,牺牲一点效率也是必要的。

第三点当中,如果你的过程不需要判断是否存在,就是在没有打开OPEN的情况下的话。你可以使用conn.execute。但是我的不是一概而论的。比如说,如果是一个比较少用到,不是频繁读取的过程。我会选择使用OPEN方式,而不使用conn.execute方式。

虽然这过程的速度会降低。可是这不影响到我的使用,所以我还是选择OPEN方式。原因很简单,就是兼容性的选择。

最后,在必要的时候放弃兼容性的追求,采用不同数据库不同代码。

前面第一点,我们对代码已经做了一个设置,就是数据库类型的设置。那么当我们遇到一些不能通过兼容性解决,或者是像conn.execute和OPEN方式上的追求的时候。我们可以利用前面SystemDatabaseType的参数设置进行判断,然后相应使用不同的代码。

如:
If SystemDatabaseType = "SQL" Then
'MSSQL数据库时使用的代码

Else    
'ACCESS数据库时使用的代码

End If

这样就可以保证程序的高效性以及稳定性。这也是整个程序的兼容性的一种。

关键字:MSSQL、ACCESS、兼容性、数据库

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站