sql - 在VBScript中使用输出参数调用SQL存储过程

标签 sql asp-classic vbscript adodb

我编写了一个 VBScript 函数来调用存储过程。过去,我编写了许多使用输入参数调用存储过程的函数,但在本例中,我需要使用输出参数。

在另一个应用程序中,我使用 Entity Framework 调用完全相同的存储过程,因此存储过程很好。

这是我的代码:

Function checkAccess(userid,link)
    isAllowed = false

    set cmd = Server.CreateObject("ADODB.Command")
    cmd.CommandText = "Check_Permission"
    cmd.ActiveConnection = Conn
    cmd.NamedParameters = true
    cmd.CommandType = adCmdStoredProc
    cmd.Parameters.Append(cmd.CreateParameter("@Login", adVarChar, adParamInput, 50, userId))
    cmd.Parameters.Append(cmd.CreateParameter("@LinkId", adInteger, adParamInput, 50, link))    
    cmd.Parameters.Append(cmd.CreateParameter("@IsAllowed", adBoolean, adParamOutput, 10, isAllowed))

    checkAccess = isAllowed
End Function


此函数始终返回 false。我如何使它工作?

最佳答案

您应该返回输出参数的值:

checkAccess = cmd.Parameters("@IsAllowed").Value

此外,ADO 中的输出参数不需要初始值,adBoolean 参数不需要大小,因此您可以将最后一个参数更改为:
cmd.Parameters.Append(cmd.CreateParameter("@IsAllowed", adBoolean, adParamOutput))

您也可以摆脱 isAllowed 变量,因为它不再是必需的。

关于sql - 在VBScript中使用输出参数调用SQL存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017872/

相关文章:

mysql - SELECT 语句 - 添加另一个派生字段

sql-server - 这是出于某种跟踪目的而修改我的 URL 的机器人吗?

sql - 更好地使用 URL(长字符串)作为主键,或者更短的串行整数主键?

MySQL ON DELETE CASCADE 设置但不从其他表中删除行

sql - 使用 vb.net 将 MS Access 行插入数据库

asp-classic - 在 Classic ASp 中查找未使用的页面

asp-classic - 经典 ASP TLS 1.2 问题

regex - VBscript 正则表达式替换

html - 在 VBScript 中使用 MSHTML 解析 html 文件

security - 如何防止查询字符串中的空字节注入(inject)