这是我的代码片段:
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objCon
cmd.CommandType = 4
cmd.CommandText = "SP_USERLOGIN"
response.Write(p_user_id)
cmd.Parameters.Append cmd.CreateParameter ("User_locked",adVarChar, adParamInput)
cmd.parameters(0).value = p_user_id
cmd.Execute
当我尝试附加参数时,我收到以下错误:
参数类型错误,超出可接受的范围,或者是 相互冲突。
我的存储过程只需要1个参数:
create or replace PROCEDURE SP_USERLOGIN ( User_locked VARCHAR2 ) as
BEGIN
update tusers Set user_account_status='status' where user_id = User_locked;
commit;
END;
答案 0 :(得分:2)
问题是没有定义adVarChar
等常量。未定义参数的长度可能存在第二个问题(这是第四个参数)
有一个文件名ADOVBS.INC
定义了这些,如果不包含,则必须使用常量值。
当这个问题消失时......
cmd.Parameters.Append cmd.CreateParameter ("User_locked",adVarChar, adParamInput)
......改为:
cmd.Parameters.Append cmd.CreateParameter ("User_locked",200, 1, 30)
上面的30
是varchar
的长度值。
答案 1 :(得分:0)
用于替换笨拙的cmd对象及其参数处理的微小(Oracle)解决方法。 假设您要执行存储过程PROC1并将其传递给两个参数。您创建一个名为DUMMY的虚拟表,其中两个字段的类型与参数对应。您插入一行值为什么。您对DUMMY进行更新前触发。触发器必须与PROC1完全相同,并将其参数作为“更新”记录(:new.a,:new.b)的字段读取。 在ASP中,您使用“更新schema.dummy set a = ...,b = ...”语句,就是这样。 缺点:非正统。 优点:更清洁的ASP代码;轻松调试。 +返回参数可能以相同的方式向后,读取虚拟表(顺便说一句任何表)。