如何解决在循环中运行查询时失去连接的乏味
问题是在循环中运行查询时,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 举报,一经查实,本站将立刻删除。