很多人问起在Access数据库中怎样使用存储过程,其实Access中没有存储过程,我们说的Access中的“存储过程”是指在Access中通过内置的查询表来操作数据,从而大大优化ASP查询的执行速度,下面就简要介绍如何在Access中使用“存储过程”。
例一:首先我们在Access中做一个非常简单的delete查询。
现假设有一个Table1表,我们要删除id<100的所有记录,首先打开Access,在Access左边点击“查询”,
然后选择,“在设计视图中创建查询”,弹出“查询一:选择查询”对话框,关掉“显示表”,在“查询一:选择查询”的标题上点右键,选择“SQL 视图”
在SQL视图中输入sql语句,DELETE FROM Table1 WHERE id<100,
输入完成后点击右边的小叉关闭,会提示保存,将它取名为myDelSQL,然后保存,这时候,Access的查询中就多了一个删除查询的表,
好了,我们在Access中就己经建立了删除查询,现在切换到ASP代码中来了:
在ASP中要操作使用“存储过程”,我们这里就不能用平常的rs.Open sql,1,3来操作了,这时我们要使用ADO中的Commamd命令来操作,其实很简单,就跟我们建立Recordset对象一样,代码如下:
'这儿写打开数据库的conn链接对象,己省略,请跟据自己的实际需要建立conn连接。
dim cmd ' 创建一个变量
set cmd=Server.CreateObject("Adodb.Command") '在服务器上创建Command对象。
cmd.ActiveConnection=conn ' 将cmd对象绑定到conn连接对象,只有这样才知道是对什么数据库进行操作。
cmd.CommandType=4 ' 设置Command执行命令的格式,4为存储过程,1为普通字符串,可以省略
cmd.CommandText="myDelSQL" '注意,上面设置的CommandType的值为4,所以这儿直接写上存储过程名就行了,即Access中的查询myDelSQL,如果上面的CommandType设置的为1 ,则这里必须是“select .....”的SQL语句形式。如果上面的CommandType省略,则这里需要写成 "EXECUTE myDelSQL",以说明是执行一个存储过程
cmd.Execute() '这一行执行Command命令。
set cmd=nothing '从内存中删除cmd对象
好了,就这么简单,我们现在就己经可以把这个文件存成asp,然后执行这个asp即可,我们再来打开数据库,发现id>100的记录己被删除!
例二:不带参数的SQL查询都可以用以上方法来操作,下面我们来说一下带参数的查询
现在我们假设要把数据库中的id=50的这条记录删除掉(这个id=50是由asp中带进去的),首先我们仍然需要用上面的方法来在Access中建立查询,只不过我们不能像这样写SQL语句:
DELETE FROM Table1 WHERE id=50
因为我们说过,这个50是由asp带进去的,也就是说它是一个变的量,那么我们改用以下方式来写SQL吧:
DELETE FROM Table1 WHERE id=XXX
(有人会问了,这里的XXX是个什么?数据库中并没有XXX这个字段,Access会把它看作是一个参数。
保存此查询,并给这个查询取名为 myDelSQL2 我们发现虽然XXX并不存在,但它仍然能够保存,你可以现在双击这个 myDelSQL2查询试试,它会提示输入一个参数,如果你输入的是一个有效的ID,那么它就会删除那条记录。
好了,言规正传,现在我们该回到ASP中了。同样用上面的方法,只不过下面多了两条语句,请看:
'这里是打开conn链接对象的代码
dim cmd2
set cmd2=Server.CreateObject("Adodb.Command")
cmd2.ActiveConnection=conn
cmd2.CommandType=4
set prm = Server.CreateObject("ADODB.Parameter")
prm.Name = "id" '指明参数对应的名称
prm.Value = 50 '要删除的记录ID
cmd.Parameters.Append prm '将参数添加给cmd对象
cmd2.CommandText="myDelSQL2"
cmd2.Execute()
set cmd2=nothing