为什么我的 ADODB.Command 的输出参数在执行时没有检索到值?

2024-01-10

我在经典 ASP 和 SQL Server 中有一段代码,这个想法很简单,有一个存储过程,这样你就可以插入一个文件,但在此之前,sp 将检查文件是否已经存在,之后将返回一个输出参数,所以我可以在我的asp页面上查看。

问题是输出参数的返回值什么都没有,我无法弄清楚问题出在哪里。

SP 为:

        ALTER PROCEDURE [dbo].[pi_usu_crear_cuenta]
         @msg_salida    char(1) OUTPUT  /* 0=Registro ya existe, 1=Insert satidfactorio, 2=Update Satidfactorio*/
        ,@usu_email     nvarchar(50)
        ,@usu_alias     nvarchar(50)
        ,@usu_password  nvarchar(50)
        ,@pai_cod       numeric(3,0)
        ,@usu_mayoriaedad char(1)
        ,@pk_pre        int
        ,@usu_respuesta nvarchar(50)

    AS
    BEGIN
        SET NOCOUNT ON;
       IF NOT EXISTS (SELECT * FROM tm_usu_usuarios
                       WHERE usu_email = @usu_email)
       BEGIN
        INSERT INTO tm_usu_usuarios
               (usu_email
               ,usu_alias
               ,usu_password
               ,pai_cod
               ,usu_mayoriaedad
               ,pk_pre
               ,usu_respuesta
               )
         VALUES
               (
                @usu_email
               ,@usu_alias
               ,@usu_password
               ,@pai_cod
               ,@usu_mayoriaedad
               ,@pk_pre
               ,@usu_respuesta
                );
        Select @msg_salida = '1'
       END
   ELSE
   BEGIN
        Select @msg_salida = '2'
   END
    END

经典的 ASP 是:

        Dim cmd2
        Dim Rs_crearcuenta     
        Const adCmdStoredProc = &H0004
        '---- ParameterDirectionEnum Values ----
        Const adParamInput          = &H0001
        Const adParamOutput         = &H0002
        Const adParamReturnValue    = &H0004
        '---- DataTypeEnum Values ----
        Const adInteger     = 3
        Const adChar        = 129
        Const adVarChar     = 200
        Const adVarWChar    = 202
        Const adNumeric     = 131

        Set cmd2 = Server.CreateObject("ADODB.Command")
        Set cmd2.ActiveConnection = Session("Conexion")
        cmd2.CommandText = "pi_usu_crear_cuenta"
        cmd2.CommandType = adCmdStoredProc

        cmd2.Parameters.Append cmd2.CreateParameter("@msg_salida",      adChar,         adParamOutput,      1)      
        cmd2.Parameters.Append cmd2.CreateParameter("@usu_email",       adVarChar,      adParamInput,       50, vEmail)     
        cmd2.Parameters.Append cmd2.CreateParameter("@usu_alias",       adVarChar,      adParamInput,       50, vAlias)     
        cmd2.Parameters.Append cmd2.CreateParameter("@usu_password",    adVarChar,      adParamInput,       50, vPassword)      

        SET param           =  cmd2.CreateParameter("@pai_cod",         adNumeric,      adParamInput,       3, null)
        param.Precision     = 3
        param.NumericScale  = 0
        param.Value         = vPais
        cmd2.Parameters.Append param    'NUMERIC

        cmd2.Parameters.Append cmd2.CreateParameter("@usu_mayoriaedad", adChar,         adParamInput,       1,  vMayoria_edad)      
        cmd2.Parameters.Append cmd2.CreateParameter("@pk_pre",          adInteger,      adParamInput,        ,  vPregunta)      
        cmd2.Parameters.Append cmd2.CreateParameter("@usu_respuesta",   adVarWChar,     adParamInput,       50, vRespuesta)     'NVARCHAR
        cmd2.Prepared = true

        Set Rs_crearcuenta = cmd2.Execute

        vMsgSalida=cmd2.Parameters("@msg_salida").value

        response.write("-")     
        response.write(vMsgSalida)      
        response.write("-")     

        Set Rs_crearcuenta = Nothing
response.end

As @diana https://stackoverflow.com/users/690460/diana has 已经指出了 https://stackoverflow.com/a/28685355/692942您无法访问输出参数,因为在执行查询之前不会设置它。

这是一个常见问题,在这种情况下,您可能会想,但我没有执行返回任何结果的查询,我只是插入一些数据?

乍一看似乎是这种情况,但是当您考虑使用

Select @msg_salida = '1'

您实际上返回的是单行单列ADODB.Recordset object.

在这些情况下使用SET代替SELECT是可取的,因为它不会创建ADODB.Recordset或阻止访问OUTPUT直到所有参数ADODB.Recordset对象被关闭。

例如,将上面的行更改为

SET @msg_salida = '1'

并改变你的ADODB.Command执行到

'Execute the command without returning any Recordsets
Call cmd2.Execute()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 ADODB.Command 的输出参数在执行时没有检索到值? 的相关文章

随机推荐

  • Node.js SFTP 客户端 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想通过 node js 应用程序访问 sftp 服务器 你知道有这个图书馆吗 或者你知道我如何实现这
  • Python 智能日期解析(不指定年份)

    如何解析没有年份的日期 使用 dateutil 以便当当前日期为 17 11 2012 时 这些日期将被解析如下 print parser parse 23 nov dayfirst True yearfirst False fuzzy T
  • 列表的列表的列表

    表示类型的好方法是什么LoL a 是列表的列表 的 的a 嵌套级别是任意的 但总体上是统一的 外部列表的元素 我想到的情况是对 a 的成员进行分组 列表 然后对每个子组应用下一个分组 依此类推 它 事先并不知道需要应用多少个分组 因此 rG
  • Quill 工具栏未渲染(图标路径显示而不是渲染)

    我正在尝试在 React 中运行本机 Quill 我遵循 quill 的快速入门 但不幸的是工具栏渲染存在问题 见下文 显示图标路径而不是渲染图标路径 请给我同样的指示 套筒组件 import Quill from quill core i
  • AttributeError:“Response”对象没有属性“body_as_unicode”scrapy for python

    我正在 scrapy 中处理响应并继续收到此消息 我只给出了发生错误的片段 我正在尝试浏览不同的网页 并且需要获取该特定网页中的页面数 所以我创建了一个响应对象 我在其中获取下一个按钮的 href 但继续获取AttributeError R
  • 如何为不同的构建配置指定不同的nuget包版本?

    我想为不同的项目配置指定不同的包版本 我知道这在我的 csproj 文件中对于非 NuGet 依赖项 裸 DLL 会是什么样子 但我也想尝试让它与 NuGet 包一起使用 问题是 NuGet 依赖项是在 packages config 中指
  • 为什么使用 redux-persist 而不是手动将状态持久化到 localStorage?

    另一种询问方式是 如果您真的只想使用 localStorage 补充 中保存的数据启动应用程序并将每个 redux 状态更改保存到 localStorage 持久 则使用还原 持久化 https github com rt2zz redux
  • Google Action 和 DialogFlow 错误“抱歉,此操作不适用于您的应用”

    我创建了一个 DialogFlow 应用程序 可以在我的开发者帐户中完美运行 但我需要以另一个用户的身份对其进行测试 因此在我的 Google Action 模拟器中 我添加了另一个测试帐户作为项目的所有者 我验证了该用户在 DialogF
  • 使用 MonoDevelop 4.0(又称 Xamarin Studio)重新获得 C/C++ 项目支持

    使用最新的 Xamarin Studio 从 MonoDevelop 4 0 重新标记 我无法打开 cproj不再可以在 MonoDevelop 3 0 4 7 中运行的项目 The 功能列表 http monodevelop com Do
  • 在 iOS Swift 中检测设备上正在播放的音轨

    我正在创建一个情绪跟踪应用程序 除其他外 它应该使用有关用户收听的歌曲的信息 具体来说 我感兴趣的是在播放曲目时提取从锁定屏幕视图中可见的标题 我搜索过互联网 但没有找到使用 Swift 访问这些数据的解决方案 有人可以帮忙吗 最简洁的答案
  • 链接运算符<<和运算符++的问题

    我正在学习C 我遇到了这个问题 include
  • 在循环中追加到数组 - Python

    请参见this https stackoverflow com questions 54983763 appending values to an array within an object looping over objects精简版
  • Neo4j分区

    有一种在 Neo4j 分区之间进行物理分离的方法吗 这意味着以下查询将转到节点1 Match a User Facebook 虽然此查询将转到另一个节点 可能托管在 docker 上 Match b User Google 情况是这样的 我
  • 如何正确地将 Angular index.html 文件替换/重命名为 index.php?

    在我的 Angular 项目中 我需要在 index html 文件中使用 PHP 我已经将其重命名为index php 并更新了 angular json 以在索引属性中使用index php 我的问题是 运行后ng build命令 di
  • 解决方案资源管理器 - 我的文件夹的自定义图标

    有什么方法可以更改文件夹的图标吗 在具有多个区域的大型 MVC 项目中 如果控制器 模型和视图具有不同的图标 或文本 那就太好了 带有 M 或 V 或 C 的文件夹会很好 如果我知道如何替换它们 我就可以创建它们 即使是在基于项目的变更中也
  • 将字符串转换为字符数组 - 多字节

    假设在 2019 年 每个非 UNICODE 安全的解决方案都是错误的 在 PHP 中将字符串转换为 UNICODE 字符数组的最佳方法是什么 显然 这意味着使用大括号语法访问字节是错误的 以及使用str split arr str spl
  • MySQL 中的 True/False 与 0/1

    这是faster在 MySQL 数据库中 布尔值 或者使用零和一来表示布尔值 我的前端只有一个是 否单选按钮 某些启用 使用布尔值 选项的 前端 会将所有 TINYINT 1 列视为布尔值 反之亦然 这允许您在应用程序中使用 TRUE 和
  • 如果 DELETE 不可能,则 REST HTTP 状态代码

    我的问题是关于 HTTP 状态代码的一个非常通用的问题 当DELETE在资源上是不可能的 但不考虑用户的权利 我们对某种类型的资源有一个 RESTful API The DELETE方法已在资源上获得授权 但在某些情况下无法删除资源 如果有
  • 当 dotnet.exe 找不到 DLL 时如何调试?

    我有一个 ASP NET MVC Core 2 0 应用程序 当我构建它时 输出 DLL 文件创建在bin Debug netcoreapp2 0 当我使用默认值发布它时 发布的输出是在bin Debug netcoreapp2 0 Pub
  • 为什么我的 ADODB.Command 的输出参数在执行时没有检索到值?

    我在经典 ASP 和 SQL Server 中有一段代码 这个想法很简单 有一个存储过程 这样你就可以插入一个文件 但在此之前 sp 将检查文件是否已经存在 之后将返回一个输出参数 所以我可以在我的asp页面上查看 问题是输出参数的返回值什