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

如何使用ReactJS向SQL Server插入数据?代码异常排查

解决SQL Server插入数据参数绑定失败问题

你的代码问题出在参数传递的嵌套数组上,同时还有几个可优化的点,下面是具体修复方案和解释:

直接修复版本

把request.query里的[values]改成直接传values,同时完善错误处理和日期格式:

app.post("/outwrkwip/insert",(req,res)=>{
    sql.connect(config,function(err){
        if(err){
            console.log(err);
            return res.status(500).send({message: "数据库连接失败"});
        }

        var request = new sql.Request();

        // 日期用Date对象,避免SQL Server解析格式错误
        var values = ["MTRT421PV42FOG", new Date("2022-05-11"), "4249.1", "MTBI", "16954073"];

        var sqlqry = `INSERT INTO dbo.outworkwip_Tb_KK (Order_Number,prod_Target_Date,Line_No,Order_Type,Batch_Number) VALUES (?,?,?,?,?);`                        

        // 直接传参数数组,不要嵌套外层数组
        request.query(sqlqry, values, (err,recordset)=>{           
            if(err){                
                console.log(err);
                return res.status(500).send({message: "数据插入失败"});
            } else{
                res.send({message : "Successfully Data Inserted"});
            }
            sql.close();
        });
    });
});

问题原因

request.query方法的第二个参数需要的是平铺的参数列表或直接的参数数组,你之前传[values]相当于把整个数组作为第一个参数,剩下的4个?没有对应参数,导致数据库无法正确绑定参数,所以执行失败。

更推荐的写法(命名参数)

用命名参数可以避免参数顺序出错,还能明确指定参数类型,更安全可读:

app.post("/outwrkwip/insert",(req,res)=>{
    sql.connect(config,function(err){
        if(err){
            console.log(err);
            return res.status(500).send({message: "数据库连接失败"});
        }

        var request = new sql.Request();

        var sqlqry = `INSERT INTO dbo.outworkwip_Tb_KK (Order_Number,prod_Target_Date,Line_No,Order_Type,Batch_Number) 
                      VALUES (@OrderNum, @TargetDate, @LineNo, @OrderType, @BatchNum);`                        

        // 逐个绑定参数,指定类型
        request.input('OrderNum', sql.VarChar, "MTRT421PV42FOG")
               .input('TargetDate', sql.Date, new Date("2022-05-11"))
               .input('LineNo', sql.VarChar, "4249.1")
               .input('OrderType', sql.VarChar, "MTBI")
               .input('BatchNum', sql.VarChar, "16954073")
               .query(sqlqry, (err,recordset)=>{           
                    if(err){                
                        console.log(err);
                        return res.status(500).send({message: "数据插入失败"});
                    } else{
                        res.send({message : "Successfully Data Inserted"});
                    }
                    sql.close();
               });
    });
});

内容的提问来源于stack exchange,提问作者karthick ks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:45:41