Node.js tedious

第一次执行不会出错,但再执行会出现
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') 回调中处理错误和关闭连接。