菜单

或不在可以接受的范围之内,Server数据库区别总结

2020年1月19日 - 4166am金沙下载

在典型的 ASP + Access 程序中,更新 Access
中某字段时,出现“ADODB.Recordset 错误
‘800a0bb9’,参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。”的错误。

scheduletime=request.form(“scheduletime”)setcomm=server.CreateObject(“adodb.command”)setcomm.activeconnection=conn’COMMAND对象会从打开的CONNECTION对象继承一个可用的数据库连接comm.commandtext=”scheduleupdate”‘指定存储过程名comm.commandtype=4’4表示命令的类型为存储过程setaa=comm.createparameter(“@scheduletime”,adChar,adParamInput,10)这里会报错,参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突comm.parameters.appendaa’将这个Parameter对象增加到Command对象的Parameters集合中aa.value=scheduletime’对变量赋值comm.execute

[一]连接问题(举例)

这种错误的原因很多,我这次遇到的是 conn 对象错误。前面将 Connection
对象命名为 con,rs.Open 使用的时候又是 conn,加之没有使用 <%option
explicit%> 强制
dim,所以没有报变量未声明的错误,报了“参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突”这个错误。

ALTERPROCEDURE[dbo].[scheduleupdate]@scheduletimechar(10)AS

[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,’2004/08/01′)
[Microsoft Sql Server]则不需要,如:datediff(d,enddate,’2004/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
Server2000并且打上了SP3补丁;安装好Office套件里面的Access;使用一个支持纯文本编辑并且带有行号显示的编辑器,推荐Ultra
Edit,当然也可以使用FrontPage2003,不过以前的版本行号显示不太好用。

个人能力要求:会基本的asp语法、access数据库的操作、SQLServer企业管理器的基本操作。

二、数据库的准备

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图