You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用MSSQL存储过程报错:APN参数验证失败(无效数字)

解决MSSQL存储过程调用中APN参数的"Invalid number"错误

问题核心原因

  1. 请求参数获取错误:你的Express控制器函数参数定义不符合框架规范——Express请求处理函数默认参数为(req, res, next),你直接将APN等业务参数放在函数参数位置,导致这些参数实际是undefined或非预期值,无法转换为有效的Float类型。
  2. 参数名拼写错误:代码中输入参数MONTH_YEAER拼写错误,与存储过程的参数名MONTH_YEAR不匹配。
  3. 连接池管理不当:直接调用sql.close()会关闭整个数据库连接池,导致后续请求无法正常连接数据库。

修正后的完整代码

exports.ExportPropertyReport = catchAsyncErrors(async(req, res) => {
    // 从请求体获取参数(GET请求改用req.query)
    const { APN, TimeTrend, MONTH_YEAR, lowrange, highrange } = req.body;

    // 前置验证APN有效性
    if (!APN || isNaN(parseFloat(APN))) {
        return res.status(400).json({
            error: true,
            message: "APN必须是有效的数字"
        });
    }

    let pool;
    try {
        pool = await sql.connect(config, { requestTimeout: 30000 });
        const result = await pool.request()
            .input('APN', sql.Float, parseFloat(APN)) // 强制转换为有效Float类型
            .input('TimeTrend', sql.NVarChar, TimeTrend)
            .input('MONTH_YEAR', sql.NVarChar, MONTH_YEAR) // 修正拼写错误
            .input('LOWRANGE', sql.VarChar, lowrange)
            .input('HighRange', sql.VarChar, highrange)
            .execute('dbo.Usp_ExportPropertyReport');

        console.log(result.recordset);

        res.status(200).json({
            success: true,
            message: `ExportPropertyReport called successfully`,
            data: result.recordset // 返回具体记录集更符合接口规范
        });
    } catch (err) {
        console.error(err);
        res.status(500).json({
            error: true,
            message: "执行查询失败",
            detail: err.message // 返回具体错误信息便于调试
        });
    } finally {
        // 释放当前连接池实例
        if (pool) {
            await pool.close();
        }
    }
});

额外注意事项

  • 匹配存储过程参数类型:确认Usp_ExportPropertyReport中APN参数的实际类型,若为INT或DECIMAL,需将代码中的sql.Float替换为对应类型(如sql.Int、sql.Decimal)。
  • 参数来源一致性:根据请求方式调整参数获取位置——POST请求用req.body,GET请求用req.query,确保前端传递的参数名与后端一致。
  • 全局输入验证:对所有业务参数添加有效性校验,避免无效值传入数据库触发错误。

内容的提问来源于stack exchange,提问作者Rajesh Alda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:55:25