2014-03-14 27 views
0

我尝试使用下面的命令来插页数据到SQL Server数据库: -奇怪的错误在Node.js的同时,将数据插入到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;[email protected];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; 
     } 
    }); 
} 

错误信息:

Error: [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid column name 'undefined'.

请问我该如何正确地将数据从Azure插入到SQL Server数据库?

回答

0

由于data变量中的值未定义,您正在收到该错误。您的查询最终会这样看:

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

由于标识undefined是未知的,你得到的错误信息,有没有这样的列名。

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

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

根据您目前的数据,这将最终成为一个语法错误,因为值未定义。我不知道为什么这个对象会有一个名为RequestMessage的属性,因为这不是属性通常命名的方式,但是您需要找出您要查找的数据的位置。

相关问题