冷月葬花魂 发表于 2015-1-16 22:16:13

MSSQL网站制作之怎样进步MSSQL和ACCESS的兼容性

MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务人人都晓得ASP傍边,最经常使用到的是ACCESS和MSSQL两个数据库。良多程序都想开辟成两个数据库都可使用的形式,可是碍于两个数据库得一些SQL语句纷歧致,以是招致良多程序都分两个没有需要的版本,就是ACCESS和MSSQL版!而现实上,我们能够经由过程对代码判别和辨认,把持全部程序的兼容性。也就是说,将两个版本兼容成一个体系。比方我的ASP飞云小说体系,就是两种数据库都能够运作的程序。
那末,究竟怎样让程序存在数据库兼容性而且失掉高效的运作呢。下边我将以我的飞云小说体系做典范,说说我的一些把持办法和代码。
起首,我们要把持一个参数,让程序晓得我们如今运作的是甚么数据库。
如:飞云小说程序中的Config.asp文件参数
以下为援用的内容:
ConstSystemDatabaseType="ACCESS"体系数据库范例,"SQL"为MSSQL2000/2005数据库,"ACCESS"为MSACCESS2000数据库
这是兼容性入手下手的基本,是全部程序数据库的辨别。以是长短常有需要设置这么一个参数的。
第二,数据库毗连体例和经常使用函数的辨别
在我的程序傍边,Conn.asp里边还存鄙人边的一段代码:
代码:
IfSystemDatabaseType="SQL"Then
ConnStr="Provider=Sqloledb;UserID="&SqlUsername&";Password="&SqlPassword&";InitialCatalog="&SqlDatabaseName&";DataSource="&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;DataSource="&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"
EndIf


这个代码,除区分数据库毗连体例以后,还将MSSQL和ACCESS经常使用的语句举行变量赋值。如许做的优点就是前面利用相干内容的时分能够间接利用挪用变量的办法,而不再必要举行数据库范例的判别。
比方对照工夫的datediff函数成绩上:
代码:
"Select*From[表]wheredatediff("&FY_DatePart_D&",数据库工夫,变量名)=0OrderByidDesc"
如许就免除了数据库的辨别,削减了代码量和有用性。
第三,准确利用兼容性代码,而不利用特征代码。
良多人在写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的参数设置举行判别,然后响应利用分歧的代码。
如:
IfSystemDatabaseType="SQL"Then
MSSQL数据库时利用的代码
Else
ACCESS数据库时利用的代码
EndIf

如许就能够包管程序的高效性和不乱性。这也是全部程序的兼容性的一种。
后编:
仍是和前次的教程《怎样购置合适本人的贸易程序版本》上PS课的时分写教程,嘎嘎!由于工夫对照短,大概有一些成绩没有触及到,大概历程有甚么毛病的中央,但愿人人批评斧正。
提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。

深爱那片海 发表于 2015-1-19 06:28:16

是要和操作系统进行Socket通讯的场景。否则建议慎重!

再见西城 发表于 2015-1-28 05:15:44

其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。

谁可相欹 发表于 2015-2-5 16:55:42

having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。

小魔女 发表于 2015-2-13 01:44:50

我个人认为就是孜孜不懈的学习

金色的骷髅 发表于 2015-3-3 12:33:37

你可以简单地认为适合的就是好,不适合就是不好。

海妖 发表于 2015-3-11 11:10:28

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

admin 发表于 2015-3-18 14:09:42

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

乐观 发表于 2015-3-26 04:37:47

SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
页: [1]
查看完整版本: MSSQL网站制作之怎样进步MSSQL和ACCESS的兼容性