Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp classic 从经典ASP.NET执行存储过程_Asp Classic_Vbscript - Fatal编程技术网

Asp classic 从经典ASP.NET执行存储过程

Asp classic 从经典ASP.NET执行存储过程,asp-classic,vbscript,Asp Classic,Vbscript,出于某种奇妙的原因,我发现自己正在调试一个经典ASP页面中的一个问题(在过去的两天里,我至少失去了10年的生命) 我正在尝试执行一个包含一些OUT参数的存储过程。问题在于,当存储过程返回时,其中一个OUT参数没有被填充。我可以从sqlmanagementstudio(这是2008年)执行存储过程,所有的值都按照预期设置和返回 declare @inVar1 varchar(255) declare @inVar2 varchar(255) declare @outVar1 varchar(255

出于某种奇妙的原因,我发现自己正在调试一个经典ASP页面中的一个问题(在过去的两天里,我至少失去了10年的生命)

我正在尝试执行一个包含一些OUT参数的存储过程。问题在于,当存储过程返回时,其中一个OUT参数没有被填充。我可以从sqlmanagementstudio(这是2008年)执行存储过程,所有的值都按照预期设置和返回

declare @inVar1 varchar(255)
declare @inVar2 varchar(255)
declare @outVar1 varchar(255)
declare @outVar2 varchar(255)

SET @inVar2  = 'someValue'

exec theStoredProc @inVar1 , @inVar2 , @outVar1 OUT, @outVar2 OUT

print '@outVar1=' + @outVar1
print '@outVar2=' + @outVar2 
效果很好。好极了完美的我期望的确切值将被返回并打印出来

好的,因为我试图调试一个经典的ASP页面,所以我将代码复制到一个VBScript文件中,试图缩小问题的范围

以下是我的想法:

Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"

Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn

objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "

objCommandSec.Parameters.Refresh

objCommandSec.Parameters(2) = "someValue"

objCommandSec.Execute

MsgBox(objCommandSec.Parameters(3))
不起作用。一点也不。(我又过了十年白白浪费的生活)第三个参数是空的——这也是我在经典ASP页面中体验到的

有人能解释一下吗?我认为经典的ASP代码与VBScript代码是一样的,这真是愚蠢透顶吗?我认为它使用相同的脚本引擎和语法,所以我应该可以,但我不是100%确定


我在VBScript中看到的结果与在ASP中看到的结果相同。

不要忘记将
方向设置为:


另一个解决办法是在这里

Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"

Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn
objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "

objCommandSec.Parameters.Refresh

objCommandSec.parameters.append objCommandSec.createParameter("@inVar1", adVarChar, adParamInput, 255, "someValue1")
objCommandSec.parameters.append objCommandSec.createParameter("@inVar2", adVarChar, adParamInput, 255, "someValue2")
objCommandSec.parameters.append objCommandSec.createParameter("@outVar1", adVarChar, adParamReturnValue)
objCommandSec.parameters.append objCommandSec.createParameter("@outVar2", adVarChar, adParamReturnValue)
objCommandSec.execute , , adExecuteNoRecords
outVar1 = objCommandSec.parameters("@outVar1").value
outVar2 = objCommandSec.parameters("@outVar2").value

response.write outVar1
response.write outVar2
试一试


如果您知道参数详细信息,还应避免
.Refresh
,因为它涉及返回服务器的过程。

刷新调用不应该自动执行此操作吗?不管怎么说,这没有什么区别。我试过了——我一直收到这样的信息:“参数类型错误,超出了可接受的范围,或者相互冲突。”参数名称、类型、长度、精度、比例和顺序如下(根据db):@inVar1 int 4 10 0 1@inVar2 varchar 200 200 NULL 2@outVar1 int 4 10 0 3@outVar2 varchar 50 50 NULL 4因此,我使用了以下代码objCommandSec.Parameters.append objCommandSec.CreateParameter(@inVar1),adParamInput)objCommandSec.Parameters.append objCommandSec.CreateParameter(@inVar2),adVarChar,adParamInput,200,“load_test_10”)objCommandSec.Parameters.append objCommandSec.CreateParameter(“@outVar1”,adInteger,adParamReturnValue)objCommandSec.Parameters.append objCommandSec.CreateParameter(@outVar2,adVarChar,adParamReturnValue,50)返回值仍然为空:-(这对我有用:(来自a.VBS)下一步你可能会在错误恢复后运行这个吗?这个例子对我很有用,但是如果我修改了存储过程中变量的类型,它就不起作用了-你如何访问我发布在那里的变量?哇,实际的问题是存储过程的权限,但是你的例子帮助我解决了这个问题。谢谢你,类型是adinteger(3)代替advarchar(200),大小为4(32位整数中的4个字节),因此;.Parameters.Append.CreateParameter(“@inVar1”,3,1,4,123456)。Parameters.Append.CreateParameter(“@outVar1”,3,2,4)
Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"

Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn
objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "

objCommandSec.Parameters.Refresh

objCommandSec.parameters.append objCommandSec.createParameter("@inVar1", adVarChar, adParamInput, 255, "someValue1")
objCommandSec.parameters.append objCommandSec.createParameter("@inVar2", adVarChar, adParamInput, 255, "someValue2")
objCommandSec.parameters.append objCommandSec.createParameter("@outVar1", adVarChar, adParamReturnValue)
objCommandSec.parameters.append objCommandSec.createParameter("@outVar2", adVarChar, adParamReturnValue)
objCommandSec.execute , , adExecuteNoRecords
outVar1 = objCommandSec.parameters("@outVar1").value
outVar2 = objCommandSec.parameters("@outVar2").value

response.write outVar1
response.write outVar2
With objCommandSec
 Set .ActiveConnection = Conn
 .CommandType = 4
 .CommandText = "theStoredProc"
 .Parameters.Append .CreateParameter("@inVar1", 200, 1, 255, VALUE1)
 .Parameters.Append .CreateParameter("@inVar2", 200, 1, 255, VALUE2)
 .Parameters.Append .CreateParameter("@outVar1", 200, 2, 255)
 .Parameters.Append .CreateParameter("@outVar2", 200, 2, 255)

 .Execute

 Response.Write .Parameters(3).Value
End With