簡體   English   中英

使用 Node.js 中的 mssql 模塊,事務未按預期回滾

[英]Transaction not rolling back as expected using the mssql module in Node.js

我實際上已經找到了這個問題的答案,並且只想記錄我的發現。

以下是導致問題的原因:

let transaction = new sql.Transaction(pool);
await transaction.begin();
await pool.request (transaction).query (" *** SOME SQL *** ");
await transaction.rollback();

事務根本不會回滾。

為了解決這個問題,我最終使用了new sql.Request (transaction)而不是pool.request (transaction) 代碼將如下所示:

let transaction = new sql.Transaction(pool);
await transaction.begin();
await new sql.Request (transaction).query (" *** SOME SQL *** ");
await transaction.rollback();

我沒有深入了解連接池如何工作的實際機制,但似乎與sql.Request class 構造函數不同, pool.request方法不帶事務參數(有知識的人請告訴我們如果這是真的)。

更新

我回去查看了mssql模塊的源碼,發現Transaction class中有一個請求方法,所以另一種解決方法是:

let transaction = new sql.Transaction(pool);
await transaction.begin();
await transaction.request().query (" *** SOME SQL *** ");
await transaction.rollback();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM