ACCESS的参数化查询

在蓝色的论坛上有位仁兄谈到ACCESS的参数化查询,说这样可以实现sql注入,我把他的想法
总结了下,封装为下面的两个函数,以后用起来就方便了,现把这两个函数转到我自己的博客上来。
1.执行插入,修改,删除
程序代码 程序代码

Function cmdFun(ByVal sql,ByVal pArr,ByVal vArr)
constr="provider=microsoft.jet.oledb.4.0;data source="&server.MapPath("/testasp/data/data.mdb")
set conn=server.CreateObject("adodb.connection")
conn.open constr
set cmd=server.CreateObject("adodb.command")
set cmd.ActiveConnection=conn
cmd.CommandType=1
cmd.CommandText=sqlstr
cmd.Prepared = true

pArrLen=Ubound(pArray)
for ii=0 to pArrLen
cmdName="cmdParaName"&ii
cmdPara=split(pArray(ii),",")
set cmdName=cmd.CreateParameter(cmdPara(0),cmdPara(1),cmdPara(2),cmdPara(3))
cmd.Parameters.Append cmdName
cmdName.value=vArray(ii)
next

cmd.Execute
set cmd=nothing
set conn=nothing
End Function


使用时
使用时:
sqlstr="insert into guestBook(mem_Author,mem_PostIP,mem_PostTime,mem_Content) values(?,?,?,?)"
’pArray为创建的parameter对象,以数据的形式;vArray是值,也以数组的形式,注意要和parameter对应
pArray=Array("'mem_Author',200,1,50","'mem_PostIP',200,1,50","'mem_PostTime',7,1,10","'mem_Content',200,1,255")
vArray=Array("测试常量","192.168.1.213","2008-01-08","function测试是")
cmdFun sqlstr,pArray,vArray

2.查询数据
程序代码 程序代码

Function cmdFun2(ByVal sql,ByVal pArr,ByVal vArr)
constr="provider=microsoft.jet.oledb.4.0;data source="&server.MapPath("/testasp/data/data.mdb")
set conn=server.CreateObject("adodb.connection")
conn.open constr
set cmd=server.CreateObject("adodb.command")
set cmd.ActiveConnection=conn
cmd.CommandType=1
cmd.CommandText=sqlstr
cmd.Prepared = true

pArrLen=Ubound(pArray)
for ii=0 to pArrLen
cmdName="cmdParaName"&ii
cmdPara=split(pArray(ii),",")
set cmdName=cmd.CreateParameter(cmdPara(0),cmdPara(1),cmdPara(2),cmdPara(3))
cmd.Parameters.Append cmdName
cmdName.value=vArray(ii)
next

set rs=cmd.Execute
if not rs.eof then
cmdFun2=rs.GetRows()
else
cmdFun2="no"
end if
rs.close
set rs=nothing
set cmd=nothing
set conn=nothing
End Function


使用时
sqlstr="select mem_Author from guestbook where mem_Author like ? or id=?"
’pArray为创建的parameter对象,以数组的形式;vArray是值,也以数组的形式,注意要和parameter对应
pArray=Array("'men_Author',200,1,50","'id',3,1,50")
vArray=Array("%特%","5")

rst=cmdFun2(sqlstr,pArray,vArray)
if isArray(rst) then
response.Write(rst(0,0))
else
response.Write(rst)
end if

一些常用的常量参数
CommandType类型
adCmdText=1 :表示处理的是一个 SQL 语句;
adCmdTable=2 :表示处理的是一个表;
adCmdStoredProc=4 :表示处理的是一个存储过程;
adCmdUnknow=8 :表示不能识别,它是默认值。

Parameter 对象
Type 指定 Parameter 对象的数据类型,可以使用符号常量为其赋值。如:
adDate=7 :表示日期值;
adInteger=3 :表示4字节的带符号整数;
adDecimal=14 :具有固定精度和范围的精确数字值;
adDouble=5 :双精度浮点值;
adVarChar=200 :表示字符串值。

Direction 参数指定 Parameter 对象类型,可以设置或返回以下某个值:
adParamInput=1 :指定为输入参数(默认值);
adParamOutput=2 :指定为输出参数;
adParamInputOutput=3 :指定为输入和输出参数;
adParamReturnValue=4 :指定为返回值。
Size 指定参数值最大长度,能字符或字节数为单位。
Value 指定 Parameter 对象的值。


[本日志由 亮亮 于 2008-04-09 10:01 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 参数化查询 command
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.