我正在研究 TS / NodeJS / MSSQL 项目,基本上我想对一组东西(例如产品)进行迭代,运行选择查询以确定该产品是否在数据库中,以及如果没有插入。
本练习的目的是为选择,插入和在循环迭代产品的循环中重用它们使用准备好的语句。
所以说我们有这个数组:
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
我真的很陌生,所以很有可能我完全错过了明显的东西或以某种方式滥用了它。
注意:代码是伪代码,仅用于描述问题。不要将其作为生产工作代码。因此,如果有一个点或逗号或任何丢失或错误的东西,那可能没问题。
任何帮助将不胜感激。 谢谢!