第一次执行不会出错,但再执行会出现
ConnectionError: .connect
can not be called on a Connection in Final
state.
问题出在connection.connect();要怎么修改
/* filename: dbseConfig.js */
var config = {
server: '192.168.5.111',
authentication: {
type: 'default',
options: {
userName: 'sa',
password: 'p@ssw0rd'
}
},
options: {
// If you are on Microsoft Azure, you need encryption:
encrypt: false,
database: 'TEST',
port:1433,
trustServerCertificate: true
}
} ;
module.exports = config;
var Request = require('tedious').Request;
const executeSQL = (connection,strgSql,strgOpt) =>
new Promise((resolve, reject) => {
var result =[];
connection.on('connect', err => {
if (err) {
console.log(err);
reject(err);
}
else{
const request = new Request(strgSql, (err,rowCount) => {
if (err) {
reject(err);
} else {
console.log("rowCount:",rowCount);
if ((result == "" || result == null || result == "null")) result = "[]";
resolve(result);
}
request.on('row', columns => {
if (strgOpt=="array"){
var arry=[]
columns.forEach(column => {
arry.push(column.value);
});
result.push(arry);
//console.log(result);
}
if (strgOpt=="object"){
var objt={}
columns.forEach(column => {
objt[column.metadata.colName]=column.value;
});
result.push(objt);
//console.log(result);
}
});
console.log("connection.close");
connection.close();
});
connection.execSql(request);
}
});
connection.connect();
}
);
module.exports ={executeSQL};
在每次执行完 SQL 后,需要显示地关闭连接。这样,下一次执行 SQL 的时候,就可以重新创建连接和连接池。
以下是一个示例代码:
const Connection = require('tedious').Connection;
const Request = require('tedious').Request;
// 根据需要配置连接信息
const config = {
server: 'your-server-name',
authentication: {
type: 'default',
options: {
userName: 'your-username',
password: 'your-password',
},
},
options: {
database: 'your-database-name',
encrypt: true,
},
};
const executeSql = (sql, callback) => {
const connection = new Connection(config);
connection.on('connect', (err) => {
if (err) {
callback(err);
return;
}
const request = new Request(sql, (err, rowCount) => {
connection.close(); // 执行完 SQL 后,关闭连接
if (err) {
callback(err);
return;
}
callback(null, rowCount);
});
connection.execSql(request);
});
connection.on('error', (err) => {
connection.close(); // 在连接错误的时候,也关闭连接
callback(err);
});
};
// 示例:执行 SQL
executeSql('SELECT * FROM your-table', (err, rowCount) => {
if (err) {
console.log('Error:', err);
} else {
console.log('Row count:', rowCount);
}
});
在上述代码中,我们在每次执行 SQL 后,使用 connection.close()
显示地关闭连接。这样,在下一次执行 SQL 之前,就可以重新创建连接和连接池。
需要注意的是,在连接错误的时候,也需要关闭连接,在 connection.on('error')
回调中处理错误和关闭连接。