节点 mssql 插入返回未定义的记录集
node-mssql insert returning undefined recordset
Select 语句工作正常,但每当我尝试插入或更新记录集时,受影响的值都是未定义的。 insert/update 在数据库中工作,我只是无法读取返回值。
var sql = require('mssql');
var config = {...};
sql.connect(config).then(function() {
new sql.Request().query("INSERT INTO MyTable (Name, Age) VALUES ('John', 30)").then(function(recordset, affected) {
console.log('Recordset: ' + recordset);
console.log('Affected: ' + affected);
}).catch(function(err) {
console.log('Request error: ' + err);
});
}).catch(function(err) {
if (err) {
console.log('SQL Connection Error: ' + err);
}
});
控制台的输出是:
Recordset: undefined
Affected: undefined
我觉得我一定错过了一些非常简单的东西。
如评论中所述,INSERT
语句不是 return 记录集,因此 recordset
未定义。请参阅文档 this section 以了解有关如何获取受影响行数的更多信息。
您的代码存在问题,您期望 affected
作为 promise 的第二个参数,但 promises 只支持一个参数。因此,您必须以这种方式访问受影响的行数:
var sql = require('mssql');
var config = {...};
sql.connect(config).then(function() {
var request = new sql.Request();
request.query("INSERT INTO MyTable (Name, Age) VALUES ('John', 30)").then(function(recordset) {
console.log('Recordset: ' + recordset);
console.log('Affected: ' + request.rowsAffected);
}).catch(function(err) {
console.log('Request error: ' + err);
});
}).catch(function(err) {
if (err) {
console.log('SQL Connection Error: ' + err);
}
});
如果要id作为输出参数
const sql = require("mssql/msnodesqlv8");
const pool = new sql.ConnectionPool(dbConfig);`
const poolConnect = pool.connect();
let query = `INSERT INTO <table>(fields) VALUES(values);SELECT @id = SCOPE_IDENTITY()`
await poolConnect;
pool.request()
.output("id", sql.Int)
.query(query).then((err, result) => {
console.log(result.output.id)
}).catch(err => {
console.log(err)
})`
Select 语句工作正常,但每当我尝试插入或更新记录集时,受影响的值都是未定义的。 insert/update 在数据库中工作,我只是无法读取返回值。
var sql = require('mssql');
var config = {...};
sql.connect(config).then(function() {
new sql.Request().query("INSERT INTO MyTable (Name, Age) VALUES ('John', 30)").then(function(recordset, affected) {
console.log('Recordset: ' + recordset);
console.log('Affected: ' + affected);
}).catch(function(err) {
console.log('Request error: ' + err);
});
}).catch(function(err) {
if (err) {
console.log('SQL Connection Error: ' + err);
}
});
控制台的输出是:
Recordset: undefined
Affected: undefined
我觉得我一定错过了一些非常简单的东西。
如评论中所述,INSERT
语句不是 return 记录集,因此 recordset
未定义。请参阅文档 this section 以了解有关如何获取受影响行数的更多信息。
您的代码存在问题,您期望 affected
作为 promise 的第二个参数,但 promises 只支持一个参数。因此,您必须以这种方式访问受影响的行数:
var sql = require('mssql');
var config = {...};
sql.connect(config).then(function() {
var request = new sql.Request();
request.query("INSERT INTO MyTable (Name, Age) VALUES ('John', 30)").then(function(recordset) {
console.log('Recordset: ' + recordset);
console.log('Affected: ' + request.rowsAffected);
}).catch(function(err) {
console.log('Request error: ' + err);
});
}).catch(function(err) {
if (err) {
console.log('SQL Connection Error: ' + err);
}
});
如果要id作为输出参数
const sql = require("mssql/msnodesqlv8");
const pool = new sql.ConnectionPool(dbConfig);`
const poolConnect = pool.connect();
let query = `INSERT INTO <table>(fields) VALUES(values);SELECT @id = SCOPE_IDENTITY()`
await poolConnect;
pool.request()
.output("id", sql.Int)
.query(query).then((err, result) => {
console.log(result.output.id)
}).catch(err => {
console.log(err)
})`