VBscript 使用输出参数从 MySQL 调用存储过程[重复]

2024-04-15

[编辑20220219]

使用下面的 VBSCRIPT 代码解决

   SQL = " CALL NewCheckData(@pOld); "
   cn.execute(SQL)   
   
   SQL = " SELECT @pOld; "
   Set RS = cn.execute(SQL)
   
   pOld = cInt(RS("@pOld"))

[编辑20220219]

[EDIT]

我在 MySQL 数据库上有一个存储过程。

它只是获取参数的 COUNT ROWS 并返回该参数的值。

我想调用此存储过程来为 VBscript 代码中的变量赋值。

这是 MySql 例程(存储过程),经过尝试并有效。

CREATE DEFINER=`user`@`%` PROCEDURE `NewCheckData`(OUT pOld INT (11))
BEGIN

SELECT
    COUNT(*) tOld INTO pOld
FROM
    `DoTable` 
WHERE
    DATE( myDATE ) = CURRENT_DATE;

END

VBSCRIPT代码如下

   On Error Resume Next
   
   Const adCmdStoredProc = 4
   Const adInteger = 3
   Const adVarWChar = 202
   Const adParamInput = &H0001
   Const adParamOutput = &H0002
   Const adParamReturnValue = &H0004

   Set cn = CreateObject("ADODB.Connection")
   cn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=XXX;PORT=3306;DATABASE=XXX;USER=XXX;PASSWORD=XXX;OPTION=3;"  
   cn.CommandTimeout = 10000
   
   Set cmd = CreateObject("ADODB.Command")
   
   With cmd
      Set .ActiveConnection = cn
          .CommandText = "NewCheckData"
          .CommandType = adCmdStoredProc
          .Parameters.Append .CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue )
          .Parameters.Append .CreateParameter("@pOld", adInteger, adParamOutput, 11)
          .Execute
          parmval = .Parameters(0).Value
   End With
   
   cn.Close()
   Set cn = Nothing

   If Err.Number <> 0 Then
     WScript.Echo "Error in : " & Err.Description
     Err.Clear
   End If
   On Error GoTo 0
Error or messagebox

错误或消息框

任何建议,请。

[老问题]

我正在使用 VBSCRIPT 并使用存储过程 MySQL。

我必须获取存储过程输出参数的值。

This is MySql例程 (存储过程)尝试并工作

CREATE DEFINER=`user`@`%` PROCEDURE `CheckData`(OUT pOld INT (11))
BEGIN

SELECT
    COUNT(*) tOld INTO pOld
FROM
    `DoTable` 
WHERE
    DATE( myDATE ) = CURRENT_DATE;

END

VBSCRIPT代码如下

   Set cn = CreateObject("ADODB.Connection")
   cn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=XXX;PORT=3306;DATABASE=XXX;USER=XXX;PASSWORD=XXX;OPTION=3;"  
   cn.CommandTimeout = 1000 

   Set objCommandSec = CreateObject("ADODB.Command")
   objCommandSec.ActiveConnection = cn
   objCommandSec.CommandType = 4
   objCommandSec.CommandText = "CheckData"

   objCommandSec.Parameters.Refresh

   objCommandSec.Parameters.append objCommandSec.createParameter("@pOld", adInteger, adParamReturnValue) <<< error line
   objCommandSec.execute , , adExecuteNoRecords
   pOld = objCommandSec.Parameters("@pOld").value

   MsgBox(pOld) 
   
   cn.Close()
   Set cn = Nothing

错误或消息框第 15 行

Error 'Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another'

任何建议,请。


编辑:我没有考虑并提及下面的代码示例正在访问 MS-SQL 数据库。因此,行为可能会有所不同。

我不再使用 .VBS 了,但由于我相信您正在使用“Windows Script Host”环境,所以我认为这不会有太大区别。过去,我已经使用 WSH 和 .JS 多次完成了与您上面演示的基本相同的操作。当我显式添加参数定义时,我也总是遇到问题。从那以后我了解到,对我来说 .refresh() 是完全足够的。因此,我现在将 .createParameter 保留在外,只需为命名参数提供所需的值,如下所示:

var jsADO = {}; 
jsADO.objConn = new ActiveXObject("ADODB.Connection");
jsADO.objConn.Open("Provider=SQLOLEDB.1;...");
jsADO.cmd_insertShare = new ActiveXObject("ADODB.Command");
var cmd = jsADO.cmd_insertShare;
cmd.ActiveConnection = jsADO.objConn;
cmd.CommandType = adCmdStoredProc; // 4
cmd.CommandText = "usp_insertShare";
cmd.Prepared = true;
cmd.NamedParameters = true;
cmd.Parameters.Refresh()

...

var sqlRec;
var cmd = jsADO.cmd_insertShare;
cmd.Parameters("@p_Server")      = "myServer";
cmd.Parameters("@p_Name")        = "myShare";
cmd.Parameters("@p_Description") = "myShare Desc";
cmd.Parameters("@p_LocalPath")   = "sharePath";
sqlRec = cmd.Execute(null, null, 0);

语法确实不同,但我希望要点是清楚的。

总之,我认为您已经明白了,只需尝试保留 .createParameter 函数并仅设置命名参数值即可。

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

VBscript 使用输出参数从 MySQL 调用存储过程[重复] 的相关文章

随机推荐

  • 网站所有者错误:网站密钥无效

    我创建了一个 reCAPTCHA 密钥并禁用Verify the origin of reCAPTCHA solutions 但我仍然遇到错误ERROR for site owner Invalid site key 我该如何解决 同样在这
  • Hartl 教程中的 bundle exec rspec spec/requests/static_pages_spec.rb 不起作用

    我正在按照 Michael Hartl 的 ruby on Rails 教程来测试示例应用程序 3 2 1 测试驱动开发 但在输入后出现以下错误bundle exec rspec spec requests static pages spe
  • Sublime Text 3 - 特定于语言的 Goto 定义键盘快捷键

    如何根据我正在使用的语言设置 Goto Definition 工作 例如 在 Python 中 我想使用 PythonIDE 的 go to 定义 keys ctrl d command python goto definition 而且
  • 如何减小 Android 上的 expo/react-native 应用程序的大小

    我正在通过使用 React Native 和 Expo 来开发一个小型词典应用程序 当我编译为 Apk 文件时 大小可达 30mb 安装到设备上后 大小可达 80mb 这是正常的吗 有什么方法可以减小应用程序的大小吗 感谢你们 对于使用 e
  • 使用随机盐改进密码散列

    我正在创建一个网站 并尝试决定如何加密用户密码以将其存储在 SQL 数据库中 我意识到使用简单的 md5 密码 是非常不安全的 我正在考虑使用 sha512 password salt 并且我一直在研究生成有用盐的最佳方法 我读过很多文章
  • 是否可以防止 getServerSideProps 在初始加载后导致整个页面重新加载?

    我有一个服务器渲染的 next js 应用程序 它是一个 3 页的结账流程 在第一页上 我正在获取各种设置数据 例如标签翻译和里面的购物篮商品getServerSideProps 如下 用户详细信息 js import React from
  • 将函数应用于数组的简单方法

    我知道array walk and array map 但是 当像这样使用前者时 在旧项目上 它失败了 array walk POST mysql real escape string 警告 mysql real escape string
  • Laravel Eloquent 按最新记录分组

    我正在尝试获取表上单个客户的最新记录 例子 ID Customer City Amount 1 Cust001 City1 2 2 Cust001 City2 3 3 Cust001 City1 1 4 Cust001 City2 1 5
  • 关于 Java 中文件加密性能的建议

    我正在做一些文件加密相关的工作 我能够加密 解密文件 但面临主要的性能问题 当我简单地读取 写入 700 MB 大小的视频文件时 我的代码的执行速度约为 27 28 MB s 但是当我执行加密时 我目前正在使用 PBEWithMD5AndD
  • 如果我的地图需要小而不是快,我应该使用 Map 的哪种实现?

    我习惯使用HashMap在我的程序中 因为我知道它通常是最有效的 如果使用得当 并且可以轻松处理大型地图 我知道关于EnumMap这对于枚举键非常有用 但我经常生成一个小地图 它永远不会变得很大 很可能很快就会被丢弃 并且没有并发问题 Is
  • 如何动态添加表格行,包括具有不同 ID 的文本框和选择框

    我开发了一个表 它具有在按下按钮时动态生成表格行的功能 但在添加新行时我无法添加选择框 我怎样才能做到这一点 下面列出了 HTML 和 JS 代码 function addRow tableID var table document get
  • 如何在发布之前将取消令牌插入 ReactiveX 流(IObservable)?

    如何将取消令牌插入现有的IObservable调用前的管道Publish在其上 即 在它成为IConnectableObservable 在订阅它之前 这必须是冷可观察管道的一部分 否则 我可以传递一个CancellationToken令牌
  • JAXB Java 7 与 Java 8 的差异

    我发现在 Java 7 上处理 Jaxb 与在 Java 8 上处理 Jaxb 之间存在另一个区别 我已将问题简化为一个简化的示例 并且代码应作为单个类运行 更改了类别 因此它与工作无关等 当 Unmarshaller 调用列表的 sett
  • IntelliJ读取远程服务器日志文件

    您知道如何设置远程配置以在服务器而不是本地计算机上显示日志文件吗 在编辑配置屏幕 日志 选项卡 上 我可以选择显示日志文件 但仅记录来自我的计算机的日志 而不是来自远程服务器的日志 我不介意是否必须为其安装任何插件 但到目前为止我找不到任何
  • 将非 unicode、非英语内容转换为 unicode

    我有一个 xyz 语言的文本内容 p style font family xyz eWvS kmwkMns kq t mWmb KmeIvkn kocokns aq mw Xn v p It will not display correct
  • Rails 3.1应用程序部署教程

    我正在寻找一个关于服务器上 Rails 3 1 1 应用程序的良好部署教程 我所说的 好 实际上是指 完整 我发布这个问题的原因是 尽管网络上有大量教程 谷歌 博客 书籍 其他 stackoverflow 问题等 但它们似乎都集中在部署过程
  • 有没有办法在php代码中注意到E_NOTICE?

    我有一个 PHP 脚本 需要执行几个小时 有时由于某些原因 例如 执行需要连接到互联网的脚本时出现网络问题等 执行过程会停止一段时间 然后做了错误的事情 当进程走向错误时它总是会导致 E NOTICE 我的问题是 有 任何 方法可以注意到脚
  • 如何将元素翻译为里程表

    我有代码 div class wrap2 span 0 span span 1 span CSS wrap2 data num 0 transfom translate 0 0 wrap2 data num 1 transform tran
  • PHP 应用程序 URL 路由

    因此 我正在编写一个框架 我想在该框架上构建一些我正在开发的应用程序 该框架在那里 所以我有一个可以使用的环境 以及一个可以让我使用单个应用程序的系统 登录 我想制作这个框架 它的应用程序使用面向资源的架构 现在 我想创建一个可由 APP
  • VBscript 使用输出参数从 MySQL 调用存储过程[重复]

    这个问题在这里已经有答案了 编辑20220219 使用下面的 VBSCRIPT 代码解决 SQL CALL NewCheckData pOld cn execute SQL SQL SELECT pOld Set RS cn execute