【问题标题】:Node.js - adding multiple parameters dynamically using MSSQL packageNode.js - 使用 MSSQL 包动态添加多个参数
【发布时间】:2019-03-05 09:45:36
【问题描述】:

我正在尝试编写一个函数来处理我对数据库执行的所有查询,但是,我正在努力寻找一种方法来动态地将参数添加到我的请求中。

所有 NPM 文档都提供了添加参数的非动态示例 (https://www.npmjs.com/package/mssql)。

示例 NPM 文档:

function runStoredProcedure() {
    return pool2.then((pool) => {
        pool.request() // or: new sql.Request(pool2)
        .input('input_parameter', sql.Int, 10)
        .output('output_parameter', sql.VarChar(50))
        .execute('procedure_name', (err, result) => {
            // ... error checks
            console.dir(result)
        })
    });
}

我的实现是这样的

// promise style:
const pool2 = new sql.ConnectionPool(config, err => {
    // ... error checks
});
 
pool2.on('error', err => {
    // ... error handler
})
 
function runStoredProcedure(res, proc, sqlParams) {
    return pool2.then((pool) => {
        pool.request() // or: new sql.Request(pool2)
        .input('input_parameter', sql.Int, 10) //
        .execute(proc, (err, recordset) => {
            // ... error checks
            res.json(recordset[0]);
        })
    });
}

理想情况下,我想为我的参数声明pool.request(),然后声明foreach

我认为发布这个问题会很有用,因为 mssql 包的实际用例会考虑动态添加参数,尽管文档中给出了示例。

【问题讨论】:

    标签: node.js sql-server database


    【解决方案1】:

    pool.request 返回一个请求对象。您不必使用 fluent API,但可以忽略每个 input 调用的返回值并单独调用它们:

    function runStoredProcedure(res, proc, sqlParams) {
        return pool2.then((pool) => {
            const req = pool.request();
            sqlParams.forEach(function(param) {
                req.input(param.name, param.type, param.value);
            });
            req.execute(proc, (err, recordset) => {
                // ... error checks
                res.json(recordset[0]);
            });
        });
    }
    

    【讨论】:

    • 极好——为了将来参考,我应该更仔细地查看 pool.request() 的返回类型,以获取有关如何执行此操作的线索。非常感谢。
    【解决方案2】:
    // create parameter json
        let sqlParams = [{ "name": "ParamName1", "type": sql.Date, "value": obj.ParamName1 },
                         { "name": "ParamName2", "type": sql.Int, "value": obj.ParamName2 }];
    
    // Call Function
        let result = await getDbResult(sqlParams, 'Procedure name ');
    
    
    
    
    // Dynamic function of call Stored Procedure
    
    exports.getDbResult = async (sqlParams, SpName) => {
        try {
            let pool = await sql.connect(dbconfig)
            const result1 = await pool.request();
            sqlParams.forEach(function (param) {
                result1.input(param.name, param.type, param.value);
            });
            return await result1.execute(SpName);
        } catch (err) {
            console.log(err);
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2018-05-07
      • 2017-04-22
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多