如何使用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
相关产品推荐
相关产品推荐

