热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » MySQL/MSSQL编程 » 如何提高MSSQL和ACCESS的兼容性

如何提高MSSQL和ACCESS的兼容性

论坛链接
  • 如何提高MSSQL和ACCESS的兼容性
  • 发布时间:2009-11-09 11:47:44    浏览数:7035    发布者:lbsong    设置字体【   
大家都知道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



这样就可以保证程序的高效性以及稳定性。这也是整个程序的兼容性的一种。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理