【发布时间】:2019-12-19 14:44:52
【问题描述】:
我正在开发一个 TS/NodeJS/MSSQL 项目,我基本上想迭代一个数组,比如说产品,运行一个选择查询来确定所述产品是否在数据库中,并且如果不插入。
本练习的目的是为 select、insert 使用准备好的语句,并能够在迭代产品的循环中重用它们。
假设我们有这样的数组:
export interface IProduct{
name:string;
price:number;
}
然后我们创建连接:
const mssql = require(mssql);
let connection = new mssql.ConnectionPool({
server:[server address],
database:[database name],
user:[username],
password:[password]
});
然后是准备好的查询
let insertQuery = new msssql.PreparedStatement(connection);
insertQuery.input("name",mssql.TYPES.NVarChar);
insertQuery.input("price",mssql.TYPES.Float);
然后让我们迭代 products 数组:
async iterateProducts(products:Array<IProduct>){
//first prepare the query if it's not prepared
if(!insertQuery.prepared)
await insertQuery.prepare("INSERT INTO Products (name,price) values (@name,@price)");
products.forEach(async (p)=>{
let insertResult = await insertQuery.execute(p);
//do anything after insert
});
}
//then unprepare query
await insertQuery.unprepare();
我不断收到的错误是
Can't acquire connection for the request. There is another request in progress
我对这些东西真的很陌生,所以我很有可能完全错过了一些明显的东西或以某种方式滥用它。
注意:代码是伪代码,只是描述问题。不要把它当作生产工作代码。所以如果有一个点或逗号或任何缺失或错误的东西,它可能没问题。
任何帮助将不胜感激。 谢谢!
【问题讨论】:
标签: node.js typescript node-mssql