【问题标题】:Weird error in Node.js while inserting data into SQL Server database将数据插入 SQL Server 数据库时 Node.js 出现奇怪错误
【发布时间】:2014-03-14 08:05:31
【问题描述】:

我正在尝试使用以下命令将数据插入 SQL Server 数据库:-

CREATE TABLE table_simupush
(
    id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    priority int NOT NULL
)

我可以在本地测试时通过以下代码插入数据:-

function SendSimupushData(data)
{
    SQL.open(connectionString, function(err, conn) {
        if(err) {
            // error handler code
            console.log("Azure database connection opening erro: "+err);
            RESPONSE.send(200, { ResponseMessage: 'error' });
        }
        else
        {
                            // it works locally 
            //var command ="INSERT INTO [dbo].[table_simupush] VALUES ('"+data+"')";
            // it also works locally
                              var command ="insert into [dbo].[table_simupush] values ("+data+")";
            console.log("connectionString open ok");
            InsertInDatabase(command, conn);
        }
    });
}

function InsertInDatabase(command, conn)
{
    SQL.query(connectionString, command, function(err, recordset) {
        if(err){
            console.log("erro: "+err);
            conn.close();
            RESPONSE.send(200, { ResponseMessage: 'error' });
            return;
        }
        else
        {
            console.log("InsertInDatabase successlly inserted");
            conn.close();
            RESPONSE.send(200, { ResponseMessage: 'ok' });
            return;
        }
   });
} 

虽然尝试使用 Azure 移动服务 API 中的相同代码,但出现以下错误:

// service bus
process.env.AZURE_SERVICEBUS_NAMESPACE= "my_namespce";
// service bus fifthelement access key
process.env.AZURE_SERVICEBUS_ACCESS_KEY= "xxxxxxxxxxxxxxxxxxxxxxx";
// azure sql database module
var SQL = require("msnodesql");
// Solax_db database conneciton string
var connectionString = "Driver={SQL Server Native Client 10.0};Server=tcp:kqgh8bqx1z.database.windows.net,1433;Database=solax_db;Uid=masum@kqgh8bqx1z;Pwd={xxxxxx};Encrypt=yes;Connection Timeout=30;";
var REQUEST;
var RESPONSE;

exports.post = function (req, res)
{
    REQUEST = req;
    RESPONSE = res;
    var data = req.RequestMessage;
    SendSimupushData(data);
}

function SendSimupushData(data)
{
    SQL.open(connectionString, function(err, conn) {
        if(err) {
            // error handler code
            console.log("Azure database connection opening erro: "+err);
            RESPONSE.send(200, { ResponseMessage: 'error' });
        }
        else
        {
            //var command ="INSERT INTO [dbo].[table_simupush] VALUES ('"+data+"')";
            var command ="insert into [dbo].[table_simupush] values ("+data+")";
            console.log("connectionString open ok");
            InsertInDatabase(command, conn);
        }
    });
}

function InsertInDatabase(command, conn)
{
    SQL.query(connectionString, command, function(err, recordset) {
        if(err){
            console.log("erro: "+err);
            conn.close();
            RESPONSE.send(200, { ResponseMessage: 'error' });
            return;
        }
        else
        {
            console.log("InsertInDatabase successlly inserted");
            conn.close();
            RESPONSE.send(200, { ResponseMessage: 'ok' });
            return;
        }
   });
}   

错误信息:

错误:[Microsoft][SQL Server Native Client 10.0][SQL Server]列名“未定义”无效。

能否请您告诉我应该如何将数据从 Azure 正确插入 SQL Server 数据库?

【问题讨论】:

    标签: sql node.js azure node-sqlserver


    【解决方案1】:

    您收到该错误是因为 data 变量中的值未定义。您的查询最终将如下所示:

    insert into [dbo].[table_simupush] values (undefined)
    

    由于标识符 undefined 未知,您会收到错误消息,即没有这样的列名。

    因为它是一个整数值,你应该解析输入,这也将保护你免受 SQL 注入攻击:

    var data = parseInt(req.RequestMessage, 10);
    

    由于值未定义,您当前的数据最终将成为解析错误。我不知道为什么该对象会有一个名为 RequestMessage 的属性,因为这不是属性通常的命名方式,但您需要弄清楚您要查找的数据在哪里。

    【讨论】:

    • 如果像这样查询我们能做什么?........ ``` var query = "INSERT INTO [student] (id, name, class, mark) VALUES ( " + req.params.id + ",'" + req.params.name + "','" + req.params.class + "',"+ req.params.mark +")"; ```
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多