RequestError:无法将值 NULL 插入到列“NetValue”中,表列不允许 null。INSERT 失败

RequestError: Cannot insert the value NULL into column 'NetValue', table column does not allow nulls. INSERT fails

提问人:Marilina 提问时间:1/19/2023 最后编辑:Marilina 更新时间:1/19/2023 访问量:179

问:

我正在尝试使用 Node JS Express 在本地安装的 Microsoft Sql Server 中插入一些值。 参数的值是从用户在网页(通过ejs文件创建)中输入的。 我读过很多类似问题的解决方案,但没有一个适合我。

给定的值(例如公司和数据)被正确插入,但在其他值中似乎总是将空值解析到数据库,我不明白为什么。 与数据库的连接工作正常(相应的选择查询显示所有行) 将不胜感激任何帮助。

代码如下图所示:

//Controller to create an insert in the database 
exports.postbudget = (req, res, next) => {
    const company = 10008;
    const data = '02';
    const date = new Date(2022,01,19);
    const doc = 'Budget';
    const reason = 'Budget';
    const quantity = 0;
    const supplieruid = req.body.SupplierUID;
    const resource = req.body.ResourceID;
    const taskid = req.body.TaskID;
    const value = parseInt(req.body.NetValue);

    mssql.connect(dbconfig, function(err) {
        if (err) console.log('Error: ', err);

        var request = new mssql.Request();
        request.input('company', mssql.Decimal(18,0), company)
        .input('data', mssql.NVarChar(50), data)
        .input('supplieruid', mssql.NVarChar(50), supplieruid)
        .input('date', mssql.DateTime, date)
        .input('doc', mssql.NVarChar(50), doc)
        .input('reason', mssql.NVarChar(50), reason)
        .input('resource', mssql.NVarChar(20), resource)
        .input('taskid', mssql.NVarChar(20), taskid)
        .input('quantity', mssql.Decimal(18,3), quantity)
        .input('value', mssql.Decimal(18,2), value)

        // Query to the database
        .query("INSERT INTO [CostTransactions] (CompanyID, DataTypeCode, SupplierUID, CT_IssueDate, CT_DocNumber, CT_Reason, ResourceID, TaskID, Quantity, NetValue) \
        VALUES (@company, @data, @supplieruid, @date, @doc, @reason, @resource, @taskid, @quantity, @value)")

        .then(function(result) {
            console.log(result);
            //return result.recordset;
            res.redirect('/budget');
            //mssql.close();
        })
        .catch(err => { 
            if (err) {
                console.log(err);
                res.render('404.ejs');
            }
        })
    })
}```
节点 .js SQL-Server Express

评论

0赞 siggemannen 1/19/2023
只是一个猜测,你的用户输入的不是整数,而是其他的东西。你能记录“值”变量并看看它实际上变成了什么吗,也许你需要一些验证
0赞 AlwaysLearning 1/19/2023
我想显而易见的问题是:里面存储了什么?例如,将返回 但将返回 .req.body.NetValueparseInt('0.48')0parseInt('$0.48')NaN
0赞 Marilina 1/19/2023
在 req.body.NetValue 中存储了一个 ejs 文件类型为 “number” 的输入变量(由用户提供)。但问题不仅在于 Value 变量,还在于 supplieruid、resource 和 taskid,它们在 sql server 中最终也为 null(它只是不会对它们产生错误,因为它们的列允许 null)
0赞 AlwaysLearning 1/20/2023
如果没有一个元素被正确初始化...您是如何在代码中初始化的?您是否正在使用和/或中间件?req.bodyexpressbody-parserexpress.json()
0赞 Marilina 1/20/2023
是的,我正在使用所有这些..(也单独尝试过)var bodyParser = require("body-parser"); const express = require("express"); const app = express(); app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.use(express.json()); app.use(express.urlencoded({ extended: true }));

答: 暂无答案