【问题标题】:How do I query a stored procedure in node-odbc/sybase?如何查询 node-odbc/sybase 中的存储过程?
【发布时间】:2021-03-25 05:37:50
【问题描述】:

在大量 google-fu 之后,我想出了一种查询古老的 sybase 数据库的方法,以开始为我正在使用 node-odbc (https://github.com/markdirish/node-odbc/blob/master/README.md#callprocedurecatalog-schema-name-parameters-callback) 开发的移动应用程序构建一个 rest api。

我已经成功地使用 select 语句进行了查询,但出于安全考虑,我不希望这样做。 当我尝试使用存储过程时,我得到了一个奇怪的响应。我需要在这里进行健全性检查并找出我缺少的东西。

我尝试的一个示例存储过程是一个简单的 sp,它有一个参数来使用帐号检查电子邮件地址(这当然是一个假 sp,但格式相同):

"DB"."spGetEmail"(@acctnum varchar(50))

文档显示:

const odbc = require('odbc');

odbc.connect(${process.env.CONNECTION_STRING}, (错误, 连接) => { connection.callProcedure(null, null, 'MY_PROC', [undefined], (error, result) => { if (error) { console.error(error) } // 处理 // result 包含一个结果数组,并且有一个parameters 属性来访问过程返回的参数。 控制台.log(结果); }); });

我将其解释为如下所示:

odbc.connect(${process.env.CONNECTION_STRING}, (error, connection) => { connection.callProcedure(null, "DB", "spGetEmail", [123456], (error, result) => { if (error) { console.error(error) } // 处理 // result 包含一个结果数组,并且有一个parameters 属性来访问过程返回的参数。 控制台.log(结果); }); });

然后我明白了:

[错误:[odbc] 过程期望的参数数量和 传递的参数数量不相等] { odbcErrors: [] } 未定义的分段错误

似乎很简单,我缺少一些参数,但我知道我没有。 dang sp 采用一个参数! ????

我在这里错过了什么??

【问题讨论】:

  • 你指的究竟是什么 Sybase DB?
  • sybase 16,准确地说是 SQL Anywhere 16。
  • 你试过sqlanywhere包吗?
  • 是的。它在安装之前崩溃并给出以下错误消息:npm ERR!代码 ELIFECYCLE npm 错误!错误号 4294967295 npm 错误! sqlanywhere@1.0.24 安装:node build.js npm ERR!退出状态 4294967295 npm ERR! npm 错误! sqlanywhere@1.0.24 安装脚本失败。 npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。 npm 错误!可以在以下位置找到此运行的完整日志:npm ERR! C:\Users\jasmine.logan\AppData\Roaming\npm-cache_logs\2020-12-14T19_39_17_409Z-debug.log
  • 还尝试了手动版本,您可以在 powershell 中以管理员身份 npm install --global windows-build-tools。它没有崩溃,但也没有在代码中解决。 ????

标签: node.js odbc sybase node-odbc


【解决方案1】:

[已解决] 我不确定内置的 .callProcedure() 方法是否损坏或不适合 Sybase16,但我找到了一种解决方法,以防将来对任何人都有帮助。 不要使用 callProcedure() 方法,而是这样做:

  odbc.connect(connectionString, (error, connection) => {

    let my_procedure = "exec spGetEmail @acct='12345678'"

    connection.query(my_procedure, (error, result) => {
        if (error) { console.error(error) }
        console.log(result);
    });
}); 

【讨论】:

  • 嘿@Jasmine Logan,你能告诉我你的连接字符串的格式吗?我也需要通过 NodeJS 连接到 Sybase
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
相关资源
最近更新 更多