我们有一个 Node.js 项目,它使用 ibm_db 连接到 DB2/AS400。
问题是它返回以下错误:
[SERVER] { Error: [IBM][CLI Driver] SQL1598N An attempt to connect to the database server failed because of a licensing problem. SQLSTATE=42968
[SERVER]
[SERVER] errors: [],
[SERVER] error: '[node-odbc] SQL_ERROR',
[SERVER] message: '[IBM][CLI Driver] SQL1598N An attempt to connect to the database server failed because of a licensing problem. SQLSTATE=42968\r\n',
[SERVER] state: '42968' }
是否有另一种方法可以从不需要许可证的 Node 连接到 AS400?
这是我们用于连接的代码:
"use strict";
var models = require("../../models/index");
var express = require("express");
var db2Route = express.Router();
const ibmdb = require("ibm_db");
//import ibm_db
const opts = [
'DRIVER={IBM DB2 CLI DRIVER}',
'DATABASE=*****',
'PROTOCOL=TCPIP',
'HOSTNAME=*****',
'PORT=446',
'UID=*****',
'PWD=*****',
'DBQ=,*USRLIBL'
];
db2Route.route("/").post((req, res) => {
ibmdb.open(opts.join(';'), (err, conn) => {
if (err) return console.log(err);
conn.query("Select * from TBFR0F" ,(err, data) =>{
if (err) console.log(err);
else console.log(data);
conn.close(() => console.log('done'));
});
});
});
最佳答案
如果您有权访问(抱歉,我不知道这是如何设置的),您可以使用 JDBC 或 ODBC。您可以将开源 jt400 工具包与 Java(通过 Node.js)结合使用,也可以使用将 jt400 java 库部分包装到 Node 绑定(bind)中的 node-jt400 包。
const jt400 = require('node-jt400');
const { connect, pool, Connection, TransactionFun, BaseConnection } = jt400;
const jt400config = {
host: 'POWER7',
user: username,
password: password,
"translate binary": "true" // might be important for you...
};
const pool2 = await connect(jt400config);
const query = (pool,query) => new Promise((res, rej) => {
pool
.query(query)
.then((results) => res(results))
.catch((err) => rej(err));
});
let queryResults = await query(pool2,`
SELECT * FROM (
SELECT
asdf,
asdf2,
CONCAT(CONCAT(asdf3,asdf4),asdf5) AS asdf6
FROM ${library}.${table}
) as A
WHERE asdf6= '${myAsfd6}'
`);
关于javascript - 带有 db2/AS400 的 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857493/