代码之家  ›  专栏  ›  技术社区  ›  LemusThelroy

Node.js-使用MSSQL包动态添加多个参数

  •  0
  • LemusThelroy  · 技术社区  · 7 年前

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

    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包的实际用例会很有用,因为尽管文档中给出了示例,mssql包的实际用例都会动态地添加参数。

    1 回复  |  直到 7 年前
        1
  •  5
  •   LemusThelroy    7 年前

    pool.request 返回一个请求对象。您不必使用fluent API,但可以忽略每个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]);
            });
        });
    }
    
        2
  •  0
  •   Sandip Patel    6 年前
    // 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);
            }
    }