【发布时间】: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.jsnpm 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