#node.js #odbc #sybase #node-odbc
#node.js #odbc #sybase #узел-odbc
Вопрос:
После долгих поисков в Google я нашел способ запросить древнюю базу данных sybase, чтобы начать создавать rest api для мобильного приложения, над которым я работаю, используя node-odbc (https://github.com/markdirish/node-odbc/blob/master/README.md#callprocedurecatalog-schema-name-parameters-callback).
Мне удалось успешно выполнить запрос с помощью оператора select, но я предпочел бы не делать этого в целях безопасности. когда я пытаюсь использовать хранимую процедуру, я получаю странный ответ. Мне нужна проверка работоспособности здесь и выяснить, чего мне не хватает.
пример хранимой процедуры, которую я пробовал, — это простой sp с одним параметром для проверки адреса электронной почты с использованием номера учетной записи (это, конечно, поддельный sp, но отформатированный таким же образом):
«DB».»spGetEmail» (@acctnum varchar(50) )
документы показывают это:
const odbc = require(‘odbc’);
odbc.connect( ${process.env.CONNECTION_STRING}
, (ошибка, подключение) => { connection.callProcedure(null, null, ‘MY_PROC’, [не определено], (ошибка, результат) => { if (error) {console.error(ошибка) } // handle // результат содержит массив результатови имеет parameters
свойство для доступа к параметрам, возвращаемым процедурой. console.log(результат); }); });
Я интерпретировал это так:
odbc.connect(${process.env.CONNECTION_STRING}, (ошибка, подключение) => { connection.callProcedure(null, «DB», «spGetEmail», [123456], (ошибка, результат) => { if (ошибка) {console.error(ошибка) } // handle // result содержит массив результатов и имеет parameters
свойство для доступа к параметрам, возвращаемым процедурой. console.log(результат); }); });
тогда я получаю это:
[Ошибка: [odbc] Количество параметров, ожидаемых процедурой, и количество переданных параметров не равно] { odbcErrors: [] } ошибка неопределенной сегментации
кажется, что мне не хватает некоторых параметров, но я ЗНАЮ, что это не так. Проклятый sp принимает один параметр! 😖
Чего мне здесь не хватает??
Комментарии:
1. Какую именно базу данных Sybase вы имеете в виду?
2. sybase 16, SQL Anywhere 16, если быть точным.
3. Вы пробовали
sqlanywhere
package?4. да. он разбился перед установкой, выдав следующее сообщение об ошибке: ОШИБКА npm! ошибка code ELIFECYCLE npm! ошибка № 4294967295 ОШИБКА npm! sqlanywhere@1.0.24 установка:
node build.js
ошибка нпм! Статус выхода 4294967295 ошибка npm! ОШИБКА npm! Сбой при sqlanywhere@1.0.24 установите скрипт. ОШИБКА npm! Вероятно, это не проблема с npm. Вероятно, есть дополнительный вывод журнала выше. ОШИБКА npm! Полный журнал этого запуска можно найти в: ОШИБКА npm! C:Usersjasmine . loganAppDataRoamingnpm-cache_logs2020-12-14T19_39_17_409Z-debug.log5. также попробовал ручную версию, в которой вы устанавливаете npm -global windows-build-tools от имени администратора в powershell. Это не привело к сбою, но и не сработало в коде. 😄
Ответ №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);
});
});
Комментарии:
1. Привет, @Jasmine Logan, не могли бы вы, пожалуйста, сообщить мне формат вашей строки подключения? Мне также необходимо подключиться к Sybase через NodeJS
2. @Jasmine Logan — Не уверен, как вы могли бы получить параметры из sproc, подобного этому.