繁体   English   中英

NodeJS:验证 sql 查询是否成功

[英]NodeJS: Verify if sql query was successful

我在 nodejs 中制作了一个非常简单的 api 以将我的 flutter 应用程序与 sqlserver 数据库一起使用,我有疑问。

如果查询成功返回不同的结果,我该如何进行验证?

我正在尝试在成功插入后进行更新,但我不知道如何检查它,有人可以帮助我吗?

这是 api 代码部分:

router.route("/addProduto").post((request, response) => {
    CodOS = request.body.CodOs;
    CodProduto = request.body.CodProduto;
    Qtde = request.body.Qtde;
    ValorUnitario = request.body.ValorUnitario;
    CodFuncionario = request.body.CodFuncionario;
    Sub = request.body.Sub;
    Tipo = request.body.Tipo;
    Operador = request.body.Operador;
    valorantigo = request.body.valorantigo;
    Custounit = request.body.Custounit;

    dboperations.addProduto(CodOS, CodProduto, Qtde, ValorUnitario, CodFuncionario, Sub, Tipo, Operador, valorantigo, Custounit).then(result => {


        console.log(result); 


        if (result === undefined) {
             response.json("ERROR");
         }
         else { 

        }
    })

})

如您所见,我检查结果是否未定义,但我想这不是最好的方法。

所以这里是查询代码部分:

async function addProduto() {
    try {
        let pool = await sql.connect(config);
        let addProduto = await pool.request()
            .input('input_parameter1', sql.Int, CodOS)
            .input('input_parameter2', sql.Int, CodProduto)
            .input('input_parameter3', sql.Numeric, Qtde)
            .input('input_parameter4', sql.Numeric, ValorUnitario)
            .input('input_parameter5', sql.Int, CodFuncionario)
            .input('input_parameter6', sql.Numeric, Sub)
            .input('input_parameter7', sql.Char, Tipo)
            .input('input_parameter8', sql.VarChar, Operador)
            .input('input_parameter9', sql.Numeric, valorantigo)
            .input('input_parameter10', sql.Numeric, Custounit)
            .query("INSERT INTO OSProduto (CodOS ,CodProduto ,Qtde ,ValorUnitario ,CodFuncionario ,Sub ,Tipo ,Operador ,valorantigo ,Custounit) VALUES ( @input_parameter1, @input_parameter2, @input_parameter3, @input_parameter4, @input_parameter5, @input_parameter6, @input_parameter7, @input_parameter8, @input_parameter9, @input_parameter10)")
        
        return addProduto.recordsets;
    }
    catch (error) {
        console.log(error);
    }
}

您正在使用 node-mssql,对吗?

在这里您可以查看查询结果的文档。

例如,您可以使用rowsAffected参数检查插入是否成功:

async function addProduto() {
    try {
        const pool = await sql.connect(config);
        const addProduto = await pool.request()
            .input('input_parameter1', sql.Int, CodOS)
            .input('input_parameter2', sql.Int, CodProduto)
            .input('input_parameter3', sql.Numeric, Qtde)
            .input('input_parameter4', sql.Numeric, ValorUnitario)
            .input('input_parameter5', sql.Int, CodFuncionario)
            .input('input_parameter6', sql.Numeric, Sub)
            .input('input_parameter7', sql.Char, Tipo)
            .input('input_parameter8', sql.VarChar, Operador)
            .input('input_parameter9', sql.Numeric, valorantigo)
            .input('input_parameter10', sql.Numeric, Custounit)
            .query("INSERT INTO OSProduto (CodOS ,CodProduto ,Qtde ,ValorUnitario ,CodFuncionario ,Sub ,Tipo ,Operador ,valorantigo ,Custounit) VALUES ( @input_parameter1, @input_parameter2, @input_parameter3, @input_parameter4, @input_parameter5, @input_parameter6, @input_parameter7, @input_parameter8, @input_parameter9, @input_parameter10)")
        if (addProduto.rowsAffected == 0){
            throw 'Nothing was inserted!';
        }
        return addProduto.recordsets;
    } catch (error) {
        console.log(error);
        throw error; // catch error on level above
    }
}

例如,您可以通过 Promise catch捕获错误:

router.route("/addProduto").post((request, response) => {
    dboperations.addProduto(request.body)
        .then(result => {
            console.log(result); 
            response.json("Ok!");
        })
        .catch(error => response.json({error}))
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM