为何不能实现ASP调用存储过程?

/备份与恢复数据库的存储过程/

create PROCEDURE GY_DBBak
@bakequip int, -- 备份设备:磁盘&磁带
@bakpath varchar(50), -- 带全路径的备份文件名
@baktype int, -- 完全备份&增量备份
@baklog int, -- ‘0’备份日志
@bakdb int, -- ‘0’备份数据库
@kind varchar(7), --备份还是恢复

@retmsg varchar(20) output --返回信息
AS

DECLARE @DevName_data varchar(50)
DECLARE @DevName_log varchar(50)
declare @db_path varchar(100)
declare @log_path varchar(100)

DECLARE @RC INT

SELECT @db_path = @bakpath + '.dat'
SELECT @log_path = @bakpath + 'log.dat'
SELECT @RC=0

DBCC CHECKDB(Northwind)
/***********************************************************
** CREATE BACKUP AND RESTORE DEVICES
************************************************************/
IF @RC=0
BEGIN

EXEC sp_addumpdevice 'disk', @DevName_data,@db_path

exec sp_addumpdevice 'disk', @DevName_log,@log_path
select @rc=@@error
IF @RC<>0
begin
EXEC SP_DropDevice @Devname_data
exec sp_dropdevice @devname_log
SELECT @RC=-1000
return @rc
end
END

IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE Northwind TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG Northwind WITH NO_LOG
BACKUP LOG Northwind TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE Northwind TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG Northwind WITH NO_LOG
BACKUP LOG Northwind TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SELECT @retmsg='数据库备份成功!'
END

IF @kind='restore'
BEGIN
RESTORE DATABASE Northwind FROM DISK= @DevName_data WITH REPLACE
SELECT @retmsg='恢复数据库成功!'
END

RETURN 0

/你可以在ASP中调用上面的存储过程来备份数据或是还原数据/
GO

使用ASP调用上述存储过程

1   
2dim db,rs,cm   
3set db=server.CreateObject("ADODB.Connection")   
4Set cm = Server.CreateObject("ADODB.Command")   
5set rs=server.CreateObject("ADODB.Recordset")   
6db.open "provider=sqloledb;database=lx1;uid=sa;pwd="   
  1<html>
  2<head>
  3<meta content="Microsoft Visual Studio 6.0" name="GENERATOR"/>
  4</head>
  5<body>   
  6&lt;%   
  7'调用存储过程   
  8  
  9  
 10set cm.ActiveConnection = db   
 11'将CommandText属性设为存储过程名   
 12cm.CommandText = "GY_DBBak"   
 13'将CommandType属性设为储存过程   
 14cm.CommandType = 4   
 15  
 16'创建第一个参数   
 17  
 18Set param = cm.CreateParameter("@bakequip",adInteger,adParamInput,4,)   
 19  
 20'添加到Parameters集合中   
 21  
 22cm.Parameters.Append param   
 23  
 24'创建第二个参数   
 25  
 26Set param = cm.CreateParameter("@bakpath",adChar,adParamInput)   
 27  
 28'添加到Parameters集合中   
 29  
 30cm.Parameters.Append param   
 31  
 32Set param = cm.CreateParameter("@baktype",adInteger,adParamInput)   
 33  
 34'添加到Parameters集合中   
 35  
 36cm.Parameters.Append param   
 37  
 38Set param = cm.CreateParameter("@baklog",adInteger,adParamInput)   
 39  
 40'添加到Parameters集合中   
 41  
 42cm.Parameters.Append param   
 43  
 44Set param = cm.CreateParameter("@bakdb",adInteger,adParamInput)   
 45  
 46'添加到Parameters集合中   
 47  
 48cm.Parameters.Append param   
 49  
 50Set param = cm.CreateParameter("@kind",adChar,adParamInput)   
 51  
 52'添加到Parameters集合中   
 53  
 54cm.Parameters.Append param   
 55  
 56'设置输入值   
 57  
 58cm("@bakequip") = 0   
 59  
 60cm("@bakpath") = "f:\info_pub\lx"   
 61  
 62cm("@baktype") = 0   
 63  
 64cm("@baklog") = 0   
 65  
 66cm("@bak   
 67\---------------------------------------------------------------   
 68  
 69strSQL = "EXEC 存储过程名字 参数"   
 70Set rs = cn.Execute(strSQL)   
 71\---------------------------------------------------------------   
 72  
 73调用执行的命令是cm.execute就行了。   
 74  
 75在Set param = cm.CreateParameter("@bakequip",adInteger,adParamInput,4,)   
 76  
 77一行中,其它相类似的也是错误的   
 78你使用的参数错误,在ASP中,参数都应该是数字   
 79应该改为   
 80Set param = cm.CreateParameter("@bakequip",3,1)   
 813表示是整数类型,后面的1表示传入参数,如果是2则表示是传出,3表示先传入,后传出的值,你如果不按照数字参数的方式是绝对不行的,下面送你一个参数表:   
 82  
 83名称值 整数值 功能   
 84adDBTimeStamp 135 日期时间数据类型   
 85adDecimal 14 十进制整数值   
 86adDouble 5 双精度小数值   
 87adError 10 系统错误信息   
 88AdGUID 72 全域性唯一识别字(Globally unique identifier)   
 89adDispath 9 COM/OLE自动对象(Automation Object)   
 90adInteger 3 4字节有符号整数   
 91adIUnknown 13 COM/OLE对象   
 92adLongVarBinary 205 大型2字节值   
 93adLongVarChar 201 大型字符串值   
 94adLongVarWChar 203 大型未编码字符串   
 95adNumeric 131 十进制整数值   
 96adSingle 4 单精度浮点小数   
 97adSmallInt 2 2字节有符号整数   
 98adTinyInt 16 1字节有符号整数   
 99adUnsignedBigInt 21 8字节无符号整数   
100adUnsignedInt 19 4字节无符号整数   
101adUnsignedSmallInt 18 2字节无符号整数   
102adUnsignedTinyInt 17 1字节无符号整数   
103adUserDefined 132 用户自定义数据类型   
104adVariant 12 OLE对象   
105adVarBinary 204 双字节字符变量值   
106adVarChar 200 字符变量值   
107advarchar 202 未编码字符串变量值   
108adWchar 130 未编码字符串   
109  
110方向值的意义如上:   
111名称值 整数值 功能   
112adParamInput 1 允许数据输入至该参数当中   
113adParamOutput 2 允许数据输出至该参数当中   
114adParamInputOutput 3 允许数据输入、输出至该参数当中   
115adparamReturnValue 4 允许从一子程序中返回数据至该参数当中   
116  
117如果有其它问题,请联系QQ 6833899,祝你好运。</body></html>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus