【ACCESS】asp中Access与Sql Server数据库区别总计

[一]接连难点(举例)

[Microsoft Access]

constr = “DBQ=c:\data\clwz.mdb; DRIVER={Microsoft Access Driver
(*.mdb)}”

[Microsoft Sql Server]

constr = “DRIVER={SQL Server};SERVER=host;DATABASE=mydata;uid=sa;pwd=”

[二]诚如函数(举例)

[1]DATEDIFF(datepart, startdate, enddate)
其间“datepart”参数可选用如下:
设置 描述
————————————
[Microsoft Access]
年 yyyy
季度 q
月 m
一年的日数 y
日 d
一周的日数 w
周 ww
小时 h
分钟 n
秒 s

[Microsoft Sql Server]
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
hour hh
minute mi, n
second ss, s
millisecond ms

基本上大概,但只顾的是在写的时候

[Microsoft Access]要加引号,如:datediff(‘d’,enddate,’2000/08/01′)
[Microsoft Sql Server]则不需求,如:datediff(d,enddate,’二〇〇三/08/01′)

[2][Microsoft Access]中可用如cstr等转数据类型函数,而 [Microsoft
Sql Server]中则用convert或cast函数,如:
convert(varchar,[amount])等。

[3][Microsoft Sql Server] 取当前时间用getdate等等…

[三]语句 [Microsoft Sql Server] 可以用

CASE
WHEN THEN
WHEN THEN

ELSE
END

语句,而 [Microsoft Access] 不支持。

[Microsoft Access]也不帮忙between语句

[Microsoft Sql Server]则足以这么写:

[date] between @date1 and @date2

[四]查询表

[Microsoft Sql Server] 可八个及以上表join查询,而 [Microsoft Access]
好像只好七个表联接查询(待权威承认),而且[Microsoft Sql
Server]可用“*=”和“=*”连接符。

[五]除零难点

[Microsoft Access] 在蒙受除数为零时,自动舍弃相关记录,而 [Microsoft
Sql Server]
则会报错,且查询中止。删除代码:[Microsoft Access] 能够那样写:

delete * from [table]

[Microsoft SQL Server]

只能如此写:

delete from [table]

多*会报错

时下日子: [Microsoft Access] 用date() [Microsoft SQL Server]
用getdate()假诺数据库可能会转换项指标话,可以 在ASP代码中添加如这样:

if inStr(constr,”Microsoft Access”) > 0 then
sqlstr=[Microsoft Access][sql代码]
else
sqlstr=[Microsoft Sql Server][sql代码]
end if

(constr–连接字符串)

如此那般就算改了数据库,也不用改数据库查询更新代码了。
再加:access中有true、false的字段记录,而sql里唯有smallint,对应假设在access里有“字段名=true”的,在sql
里要改成“字段名=1”
网上大多数的免费asp程序行使的是access数据库。但是access数据库作为多当中型小型型的单机数据库系统,在承担访问量、数据量大的网站使用时,
往往就不堪重负了。

诚如认为,抢先50M的access数据库品质就起来显著下滑,超越100M未来,出错、运转慢的题材会进一步优秀。尽管能够如动网7.0过后那样,从程序的角度尽量优化以图提升质量,不过不可能从根本上解决难点。

那时候恐怕使用微软的SQL
Server数据库就是最也许的艺术,当然也足以利用其它的如Oracle、MySQL等等,不过作为改写来说,由于同为微软的产品,改写成SQL
Server应该是最省力的方法。

壹 、改写前提:

系统现已设置好SQL
Server3000并且打上了SP3补丁;安装好Office套件里面包车型地铁Access;使用二个援助纯文本编辑并且带有行号显示的编辑器,推荐Ultra
艾德it,当然也足以动用FrontPage2001,可是从前的版本行号显示不太好用。

私家能力供给:会基本的asp语法、access数据库的操作、SQLServer企管器的基本操作。

贰 、数据库的预备

诚如的话有三种情状:

① 、程序提供了SQL数据库格式:有四个MDF文件,或然提供了创设SQL数据库的SQL脚本文件(后缀名为.sql)。

假设有mdf文件,能够用企管器间接附加上,如若提供的是sql脚本文件,那么就先用企业管理器本身创建三个sql数据库,然后数据库用企业管理器中的查询分析器运营这些剧本创立数量库表。
那样树立的数据库基本不用再去改写什么了。

贰 、更加多的是从未提供SQL数据库或脚本文件的,那时,就要和谐来做这一切了,那也是大家以此帖子首要消除的标题。一般那样的程序会提供1个access数据库,这样您就用企管器导入access数据库,导入后要求改写下边一些事物:

相比原来的access,改写上边的局地:

(1)sql数据库表是没有电动字段的,由此原来access中的自动字段被转换到了常常字段,供给手工业改成标识类型,增量为1。

(2)全体的时间字段,假若定义了默许值,那么原来肯定是now(),需求改成getdate()

(3)原来字段的暗中认可值一般都不会自行引入,需求相比较原表的字段手工业添加。

(4)由于数据库的两样,access和sql的字段类型很多转移后就成形了,比如原本的《是还是不是》字段会被更换到bit或然int,备注字段被转换成longtext,text字段转换来varchar等等,一般的话不会影响程序运维,倘诺有失水准,大家在底下的顺序改写一些再说。

(5)假如你要用一个For
SQL的先后,里面用到了蕴藏进度,那么您应该有那几个程序自己建立SQL数据库的点子:有其本人的SQL数据库文件,
或然sql脚本;假诺没有的话,采取导入access数据库的法门是心有余而力不足树立存款和储蓄进程的,那样你最佳扬弃那个For
SQL的先后版本,使用同一版本的 For
Access的主次,导入access数据库,然后用上面包车型大巴改写方法本人改成SQL版本的次第。

③ 、连接字符串的改写

可参看动网的那段,分别是本着access和SQL的

Dim ConnStr
If IsSqlDataBase = 1 Then
‘sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,各市用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = “dvbbs7”
SqlPassword = “”
SqlUsername = “dvbbs”
SqlLocalName = “(local)”
ConnStr = “Provider = Sqloledb; User ID = ” & SqlUsername & “; Password
= ” & SqlPassword & “; Initial Catalog = ” & SqlDatabaseName & “; Data
Source = ” & SqlLocalName & “;”
Else
‘免成本户率先次使用请修改本处数据库地址并相应修改data目录中数据库名称,如将dvbbs6.mdb修改为dvbbs6.asp
Db = “data/fengerqingqing.mdb”
ConnStr = “Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ” &
Server.MapPath(db)
End If
On Error Resume Next
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open ConnStr

自然你采用SQL的话,有关access的行使语句能够去除,就是else前面到on error
resume next前边,变成那样:

Dim ConnStr
‘sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,内地用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = “dvbbs7”
SqlPassword = “”
SqlUsername = “dvbbs”
SqlLocalName = “(local)”
ConnStr = “Provider = Sqloledb; User ID = ” & SqlUsername & “; Password
= ” & SqlPassword & “; Initial Catalog = ” & SqlDatabaseName & “; Data
Source = ” & SqlLocalName & “;”
On Error Resume Next
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open ConnStr

也得以不难一些,写成这么:

Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open “Provider = Sqloledb; User ID = sa; Password = 1234567;
Initial Catalog = dvbbs7; Data Source = (local);”

在那之中的数据库名称、数据源、用户、密码依据本人的实际景况改写一下。

④ 、程序的改写

这也有三种情形

① 、要是你碰巧,获得的是For
SQL的主次,那么只要地方的数据库建立进度没有遇上麻烦,程序基本上就足以运作了,出错的话,只是程序本身的bug,怎样修改不是以此帖子研究的内容,就不赘述了。

二 、大多数景况,程序本人是For Access的,与For
SQL的先后差异首借使先后中选取到的SQL查询语句。注意,SQL查询语句是数量
库应用不可缺点和失误的部分,不管是For SQL照旧For
Aceess的次第选用的语法大体差不离,但是有一部分神秘的差异,正是那个出入,造成了程序的不
通用,也是大家需求修改的重要内容。那样一般要修改的一对如下:

(1)时间函数的标题:SQL数据库的小时函数与access区别,最普遍的是取未来光阴的函数,access是now(),SQL是
getdate()。因而凡是在where子句中使用了now()的地点都要改成getdate();注意,now()函数在asp程序本身也要使用,凡
是不在数据库查询或实施语句中选拔的now()函数千万决不改。

(2)时间比较函数:datediff(‘d’,’时间1’,‘时间2’)那是access查询用的格式,SQl中那个引号都要去掉,同时时间格式的左右可能添加了#,那也要去掉。同样那也是指在sql语句中的,在asp语句中的要保持原样。

(3)空值的意味:在access中,判断空值一般用是还是不是=””来代表,可是那在SQL中频仍出错,假诺遇上出错的难题要么程序运营不平常,能够改成如那样判断:where
(name is null)

(4)真假值判断:access中得以用=true、=false来判断,不过在SQL中就会出错,因而在SQL查询或实施语句中那类判断要分头改
成=① 、=0。注意一点:有个别程序就算写成=“true”,然而出于有引号,所以这些字段是字符类型的,你无法改成=1,保持原样即可。

以上是比较常见的改写的地点,还有部分不太常见,假设境遇了能够在此回帖商量。

伍 、程序的调节和测试

前方推荐应用含有行号的编辑器,是因为上述的改写非常的小恐怕是直接搜索程序源码来做,很难找全。小编利用的艺术一般这样:数据库改写完结,直接调节和测试程
序,出错后,看看出错的提醒,找到相应文件的代码行,可是来自往往不是那行,比如出错的说话是:conn.execute(sql),但是那句作者是没有
错的,错误原因是个中的这一个sql字符串,那就向上看这么些sql字符串是何许变迁的,遵照上边所说的程序修章修改。

数据库导入将来,自动扩张字段需求重写,全数的数字类型须要追加长度,最棒用decimal。

装有的暗中同意值都遗落了。主假诺数字类型和日期类型。

所有now(),time(),date()要改成getdate()。

所有datediff(‘d’, time1, time2)要改成datediff(day, time1, time2)

有大概有的true/false类型不可能选择,要改成1/0。

备注类型要经过cast(column as varchar)来利用。

CursorType要改成1,也正是开辟数据库时要提交第3个数字参数为1,否则记录大概来得不完整。

isnull(rowname)要改成rowname = null

ACCESS的数据库中的自动编号类型在转载时,sql
server并从未将它设为自动编号型,大家需在SQL创造语句中增进identity,表示自动编号!

转折时,跟日期有关的字段,SQL
SEPRADOVE安德拉默许为smalldatetime型,大家最佳将它变成datetime型,因为datetime型的限量比smalldatetime型
大。有时用smalldatetime型时,转化失利,而用datetime型时,转化成功。

对此二种数据库实行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:”delete
* from user where id=10″,而对SQL SE福睿斯VE翼虎数据库举办删减是用:”delete user
where id=10″.

日子函数不均等,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL
SELX570VESportage数据库处理中,只可以用datediff,dateadd等函数,而不能够用date()、time()等函数。

在对ACCESS数据库处理中,sql语句中一贯能够用有个别VB的函数,像cstr()函数,而对SQL
SE陆风X8VE中华V数据库处理中,却不能够用。

下表相比了MicrosoftAccess数据库(MicrosoftAccess数据库:数据和目的(如表、查询或窗体)组成的聚合,与特定的宗旨或用途有关。MicrosoftJet数据库引擎用于管理数据。)和MicrosoftAccess项目(MicrosoftAccess项目:与
MicrosoftSQLServer数据库连接且用于创设客户/服务器应用程序的Access文件。项目文件中不带有别的数据或遵照数据定义的指标(如
表或视图)。)的数据类型(数据类型:决定字段可具备的数据类型的字段特征。数据类型包含Boolean、Integer、Long、Currency、
Single、Double、Date、String和Variant(暗中同意))。

MicrosoftAccess数据类型SQLServer数据类型

是/否(“是/否”数据类型:一种字段数据类型,用于惟有三种或者值(如是或否、True或False)的字段。区别意有Null值。)bit(bit数据类型:在Access项目中,一种存款和储蓄值为1或0的数据类型。接受1和0以外的平头值,但连续将其表达为1。)

数字(“数字”数据类型:MicrosoftAccess数据库中的一种字段数据类型,用于将在数学生运动算中动用的数值数据。不过,若要展现或总计货
币值,则应选择“货币”数据类型。)(字节)tinyint(tinyint数据类型:Access项目中的一种占八个字节(五个人)的数据类型,用于存储从0到255限量内的整数。)

数字(整型)smallint(smallint数据类型:Access项目中的一种2字节(十几个人)数据类型,存款和储蓄位于-2^15(-32,768)与2^15-1(32,767)之间的数字。)

数字(长整型)int(int数据类型:Access项目中的一种4字节(叁九位)数据类型,存款和储蓄位于-2^31(-2,147,483,648)与2^31-1(2,147,483,647)之间的数字。)

数字(单精度浮点型)real(real数据类型:在Access项目中,一种类似的数值数据类型,精度为八位,正值取值范围大概从1.18E-38到3.40E+38,负值取值范围大概从-1.18E-38到-3.40E+38,也能够取0。)

(无等价的数据类型)bigint(bigint数据类型:Access项目中的一种8字节(六10位)数据类型,存款和储蓄位于-2^63(-
9,223,372,036,854,775,808)与2^63-1(9,223,372,036,854,775,807)之间的数字。)

数字(双精度浮点型)float(float数据类型:在Access项目中,一种恍若的数值数据类型,精度为1四个人。它所蕴藏的正在范围大概是从2.23E-308到1.79E+308,负值范围差不多是从-2.23E-308到-1.79E+308,也足以为0。)

通货(“货币”数据类型:MicrosoftAccess数据库中的一种数据类型,用于与货币有关的总计或其精确度极其首要的定点总结。)
money(money数据类型:在Access项目中,用于存款和储蓄货币值的数据类型,取值范围从-922,337,203,685,477.5707到
922,337,203,685,477.5807,精确度为非凡之1个货币单位。)

smallmoney(smallmoney数据类型:Access项目中的一种存款和储蓄货币值的数据类型,取值范围从-214,748.3648到214,748.3647,精确度为格外之一个货币单位。当呈现smallmoney值时,会将它们四舍五入为四个小数位。)

小数/数值(decimal数据类型(Access数据库):精确的数值数据类型,用于存款和储蓄-10^38-1到10^38-1的值。能够钦点数值范
围(最大总位数)和精度(小数点左边的最大位数)。)decimal(decimal数据类型(Access项目):精确的数值数据类型,用于存款和储蓄-
10^38-1到10^38-1的值。能够钦定数值范围(最大总位数)和精度(小数点左边的最大位数)。)

numeric(numeric数据类型:在Access项目中,一种标准的数值数据类型,取值从-10^38-1到10^38-1。能够钦定数值范围(最大总位数)和精度(小数点左侧的最大位数)。)

日期/时间(“日期/时间”数据类型:Access数据库的一种数据类型,用来存放在日期和岁月音讯。)datetime(datetime数据类
型:在Access项目中,日期和岁月的数据类型,范围从1753年一月二30日到9999年三月十30日,精确度为三百分之一秒,即3.33阿秒。)

smalldatetime(smalldatetime数据类型:Access项目中的一种日期和岁月数据类型,精度比不上datetime时间数据类型。数据取值范围从一九〇五年11月15日到2079年5月十四日,精确度为一分钟。)

机关编号(“自动编号”数据类型:MicrosoftAccess数据库中的一种字段数据类型,当向表中添加一条新记录时,那种数据类型会自动为每
条记下存款和储蓄贰个唯一的号子。能够生出两种编号:顺序号、随机号和一块复制ID。)(递增)int(int数据类型:Access项目中的一种4字节(30个人)数据类型,存储位于-2^31(-2,147,483,648)与2^31-1(2,147,483,647)之间的数字。)(定义了
Identity属性)

文件(“文本”数据类型:MicrosoftAccess数据库中的一种字段数据类型。“文本”数据类型最多能够涵盖2五10个字符,大概是由
FieldSize属性内定的3个小部分的字符数。)(n)varchar(n)(varchar(n)数据类型:Access项目中的一种可变长度的数
据类型,最大尺寸为8,000个ANSI字符。)

nvarchar(n)(nvarchar(n)数据类型:在Access项目中,一种可变长度的数据类型,最多可含4,000个Unicode字符。Unicode字符每字符占多个字节,而且帮助具有国际字符。)

备考(“备注”数据类型:在MicrosoftAccess数据库中的一种字段数据类型。“备注”字段最多能够分包65,533个字符。)text
(text数据类型:Access项目中的一种长度可变的数据类型,最多可存储2^31-1(2,147,483,647)个字符;暗许长度为16。)

OLE对象(“OLE对象”数据类型:字段的数据类型之一,用于在此外应用程序中开创的、可链接或嵌入(插入)到Access数据库中的对象。)
image(image数据类型:在Access项目中,一种长度可变的数据类型,最多可存款和储蓄2^31-1(2,147,483,647)字节的二进制数
据。image数据类型用来存款和储蓄BLOB(二进制大对象),如图片、文书档案、声音和已编写翻译代码。)

共同复制ID(又名全局唯一标识符(GUID:在Access数据库中,一种用于建立共同复制唯一标识符的16字节字段。GUID用于标识副本、副
本集、表、记录和任何对象。在Access数据库中,GUID是指同步复制ID。)(GUID))uniqueidentifier
(uniqueidentifier数据类型:在Access项目中,16字节的全局唯一标识符(GUID)。)(仅适于SQLServer7.0或更高
版本)

超链接(“超链接”数据类型:存款和储蓄超链接地址的Access数据库字段的数据类型。地址最多能够分包四局地,用以下语法格式编写:displaytext#address#subaddress#。)

char(char数据类型:在Access项目中,一种永恒长度的数据类型,最多可含8,000个ANSI字符。),
nchar(nchar数据类型:在Access项目中,一种永恒长度的数据类型,最多可含4,000个Unicode字符。Unicode字符每字符占
三个字节,而且辅助具备国际字。),varchar,nvarchar(Hyperlink属性设为Yes)

(无等价的数据类型)varbinary(varbinary数据类型:Access项目中的一种可变长度的数据类型,最多可存储8,000字节的二进制数据。)

(无等价的数据类型)smallint(smallint数据类型:Access项目中的一种2字节(拾陆人)数据类型,存储位于-2^15(-32,768)与2^15-1(32,767)之间的数字。)

(无等价的数据类型)timestamp(timestamp数据类型:在Access项目中,一种每插入或更新一行就会自动更新的数据类型。
timestamp列中的值不是datetime数据,而是binary(8)或varbinary(8),标明了多少修改的种种。)

(无等价的数据类型)charnchar

(无等价的数据类型)sql_variant(sql_variant数据类型:Access项目中的一种数据类型,存款和储蓄除text、ntext、
image、timestamp和sql_variant类型以外的有余数据类型的值。在列、参数、变量或用户定义函数的再次回到值中应用。)

(无等价的数据类型)用户定义(用户定义的数据类型:在MicrosoftSQLServer数据库中,允许某列包罗的数量的类型定义,由用户选取现有的种类数据类型定义。规则和暗中认可值仅能够绑定到用户定义的数据类型。)

诠释在Access项目或SQLServer数据库中,前缀“n”代表“国家/地区”,意思是以此数据类型是启用Unicode的。在Access数据库中,全体文本列在暗许意况下都以启用Unicode的。

相关文章