MSSQL — Ошибка при выполнении процедуры в транзакции — Запросы могут быть сделаны только в состоянии LoggedIn, а не в состоянии SentClientRequest

#sql #node.js #sql-server #stored-procedures #transactions

Вопрос:

Я реализовал хранимую процедуру в Microsoft SQL Server. И я пытаюсь выполнить эту процедуру в транзакции в API с использованием mssql.

Когда я выполняю свою процедуру в одиночку (вне транзакции в моем API), все работает нормально, но когда я помещаю ее в транзакцию, у меня возникает эта ошибка :

RequestError: Запросы могут быть сделаны только в состоянии LoggedIn, а не в состоянии SentClientRequest

Это мой код :

 app.post('/api/...', async function (req, res, next) {
    // Pool
    const pool = new sql.ConnectionPool(databaseConfiguration);
    await pool.connect();

    const transaction = await new sql.Transaction(pool);

    // Transaction Begin
    transaction.begin(async (err) => {
        try {
            // Error checks
            if (err) throw new Error(err);
            // No error keep going
            // Create request
            const request = new sql.Request(transaction);
            // Input
            request.input('user', sql.VarChar, req.body.user);
            request.output('id', sql.Int);
            // Execute Procedure
            await request.execute('myProcedure', (error, result) => {
                // ... error checks
                if (error) throw new Error(error);
                // No error keep going
                console.dir(result);
            });
            // await fs.rmdirSync(dir, { recursive: true });
            transaction.commit((tErr) => tErr amp;amp; next('transaction commit error'));
        } catch (error) {
            transaction.rollback((tErr) => tErr amp;amp; next('transaction rollback error'));
            next(`unknown error inside transaction : ${error}`);
        }
    });
});
 

Кто — нибудь имеет хоть какое-то представление о моей ошибке ?

Заранее спасибо за любую помощь.

Комментарии:

1. В какой строке возникает ошибка? Добавьте console.error(error) в свой блок catch, чтобы вы могли видеть, где возникает ошибка.

2. Здравствуйте, я добавил console.log(ошибка), и ошибка Error: RequestError: Requests can only be made in the LoggedIn state, not the SentClientRequest state возникает в строке if (error) throw new Error(error); внутри моего запроса.execute(). Однако эта ошибка не возникает, когда функция request.execute() выходит за рамки моей транзакции. Заранее спасибо за любую помощь

3. Удалите обратный вызов из .execute и await вместо этого

4. Вы были правы, большое вам спасибо за помощь ! Поэтому решение состояло в том, чтобы написать await request.execute('myProcedure')