node.js - 在循环中运行查询时乏味的失去连接
问题描述
问题是在循环中运行查询时,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 分隔的字符串中;
而不是多次运行查询来解决我的问题
解决方案
推荐阅读
- android - 是否可以在纯列表视图中显示交错布局
- java - 如何在 Android Studio 中更改我已弃用的代码
- java - 如何在基于 Spring 的 REST API 中将路径参数映射到 gRPC 对象?
- reactjs - 在组件中引用另一个组件时遇到问题
- sql - 左外连接中的无效操作(在 Access 中)
- .htaccess - .htaccess 将所有请求重定向到 /home/aaa/public_html 到 /home/bbb/public_html?
- vba - “错误 -2147188160 (80048240) 形状(未知成员):无效请求。” 尝试在 PowerPoint 中将对象转换为图像时
- bash - bash 等效于 tcsh 修饰符,用于提取路径组件
- ios - “StorageMetadata”没有成员“downloadURL”
- mysql - SQL Server 中的 MySQL INDEX() 语法等效