在循环中运行查询时失去连接的乏味

问题描述

问题是在循环中运行查询时,Tedious 库只执行最后一次调用,而其他调用返回错误

ConnectionError: Connection lost - read ECONNRESET
    at ConnectionError (C:\Users\(myPath)\node_modules\tedious\lib\errors.js:13:12)
    at Connection.socketError (C:\Users\(myPath)\node_modules\tedious\lib\connection.js:1294:54)
    at Socket.<anonymous> (C:\Users\(myPath)\node_modules\tedious\lib\connection.js:1125:14)
    at Socket.emit (events.js:327:22)
    at emitErrorNT (internal/streams/destroy.js:106:8)
    at emitErrorCloseNT (internal/streams/destroy.js:74:3)
    at processticksAndRejections (internal/process/task_queues.js:80:21) {
  code: 'ESOCKET'
}

我想要实现的是在 for 循环中执行 sql 插入查询并在数组中返回查询结果

我正在使用 mssql lib 连接到 在本地主机上运行的 sql-server2019 实例

我已经尝试更新所有软件包
我试过更新 nodejs 本身

我试图运行的函数

const sql = require('mssql');

async function insertline(){
    let config = {
        user: configFile.database.username,password: configFile.database.password,server: configFile.database.host,database: configFile.database.database,port: configFile.database.port
    };
    sql.connect(config)
   .then((conn) => 
      conn.query(`
     INSERT INTO stuff 
     VALUES (values)
`)
         .then((v) => console.log(v))
         .then(() => conn.close()).catch((err) => console.log(err))
   )
    }
//either run from for loop or like this still return the same thing
insertline()
insertline()
insertline()

运行时

ConnectionError: Connection lost - read ECONNRESET
    at ConnectionError (C:\Users\(myPath)\node_modules\tedious\lib\errors.js:13:12)
    at Connection.socketError (C:\Users\(myPath)\node_modules\tedious\lib\connection.js:1294:54)
    at Socket.<anonymous> (C:\Users\(myPath)\node_modules\tedious\lib\connection.js:1125:14)
    at Socket.emit (events.js:327:22)
    at emitErrorNT (internal/streams/destroy.js:106:8)
    at emitErrorCloseNT (internal/streams/destroy.js:74:3)
    at processticksAndRejections (internal/process/task_queues.js:80:21) {
  code: 'ESOCKET'
}
ConnectionError: Connection lost - read ECONNRESET
    at ConnectionError (C:\Users\(myPath)\node_modules\tedious\lib\errors.js:13:12)
    at Connection.socketError (C:\Users\(myPath)\node_modules\tedious\lib\connection.js:1294:54)
    at Socket.<anonymous> (C:\Users\(myPath)\node_modules\tedious\lib\connection.js:1125:14)
    at Socket.emit (events.js:327:22)
    at emitErrorNT (internal/streams/destroy.js:106:8)
    at emitErrorCloseNT (internal/streams/destroy.js:74:3)
    at processticksAndRejections (internal/process/task_queues.js:80:21) {
  code: 'ESOCKET'
}
{
  recordsets: [],recordset: undefined,output: {},rowsAffected: [ 1 ]
}

错误中可以看出,只有最后一次调用函数执行成功 当我去检查 sql management studio 时,该行已按原样插入

运行一次即可正常运行

版本

nodejs: v14.15.4
npm : 6.14.10
mssql: "^6.3.1"
sql-server 15.0.2000.5(Microsoft sql Server 开发人员(64 位))

任何想法为什么会发生这种情况? 任何帮助将不胜感激:)

编辑:我还没有发现为什么会发生这种情况,但我已经解决了我的问题 将所有 sql 查询放在由 ; 分隔的字符串中,而不是多次运行查询

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)