微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

问题是在循环中运行查询时,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 举报,一经查实,本站将立刻删除。