首页 > 解决方案 > 在循环中运行查询时乏味的失去连接

问题描述

问题是在循环中运行查询时,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 连接到在 localhost 上运行的 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 Developer (64-bit))

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

编辑:我还没有找到为什么会发生这种情况,但我已经通过将所有 SQL 查询放在一个由 a 分隔的字符串中;而不是多次运行查询来解决我的问题

标签: node.jssql-servertedious

解决方案


推荐阅读