代码之家  ›  专栏  ›  技术社区  ›  Jaco Pretorius

从经典ASP执行存储过程

  •  6
  • Jaco Pretorius  · 技术社区  · 16 年前

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

    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 
    

    效果很好。好极了。完美我所期望的确切值将被返回并打印出来。

    下面是我想到的:

    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代码和VBScript代码是一样的,这是不是太傻了?我认为它使用相同的脚本引擎和语法,所以我应该可以,但我不是100%肯定。

    3 回复  |  直到 16 年前
        1
  •  10
  •   Alex K.    16 年前

    尝试

    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 
    

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

        2
  •  1
  •   Oded    16 年前

    Direction Output

    objCommandSec.Parameters(3).Direction = 2
    
        3
  •  0
  •   Alex Park    16 年前

    另一个解决办法是。

    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
    
    推荐文章