我试图从SQL Server调用寄存器存储过程。我将NodeJS与mssql
包一起使用。我从mssql
Npm文档中获得了大部分代码。但它仍然无法奏效。
代码基本上尝试启动ConnectionPool
作为读取最后更新重命名的连接到ConnectionPool
,创建新请求,引入参数并执行存储过程。我这样做是因为我需要每隔一段时间将连接变量更改为另一个数据库。
我得到的错误是:
ConnectionError:连接已关闭。
我的代码:
const sql = require('mssql');
const config = require('../config/dbPoly');
module.exports.registerUser = function(pUserName, pPassword, pNombre, pApellidos, pFK_TipoUsuario, callback) {
var connection = new sql.ConnectionPool(config);
var request = new sql.Request(connection);
request.input('input_parameter', sql.VARCHAR(25), pUserName);
request.input('input_parameter', sql.VARCHAR(16), pPassword);
request.input('input_parameter', sql.VARCHAR(25), pNombre);
request.input('input_parameter', sql.VARCHAR(50), pApellidos);
request.input('input_parameter', sql.Int, pFK_TipoUsuario);
request.execute('RegistrarUsuario', (err, result)=>{
if(err){
console.log(err);
}
else{
console.log(result);
}
});
};
答案 0 :(得分:2)
有这种异步版本的实现。检查这是否符合您的目的
const sql = require('mssql');
const config = require('../config/dbPoly');
module.exports.registerUser = async function(pUserName, pPassword, pNombre, pApellidos, pFK_TipoUsuario) {
try {
let connection = await sql.connect(config)
let result = await connection.request()
.input('input_parameter', sql.VARCHAR(25), pUserName);
.input('input_parameter', sql.VARCHAR(16), pPassword);
.input('input_parameter', sql.VARCHAR(25), pNombre);
.input('input_parameter', sql.VARCHAR(50), pApellidos);
.input('input_parameter', sql.Int, pFK_TipoUsuario);
.execute('RegistrarUsuario');
return result;
} catch (err) {
console.log(err); // ... error checks
}
};
sql.on('error', err => {
// ... error handler
})
答案 1 :(得分:0)
如果其他人面临这个问题,Prabodh的回答非常有效。
然后我遇到了另一个问题,它表示localhost在1500ms内未定义。原因是因为我在json配置文件中的服务器字段具有以下格式:'localhost \ Server-Name'。我把它改成'localhost'并修复了问题。
还要确保您的服务器启用了SQL身份验证,而不仅仅是Windows身份验证。