【问题标题】:Error while running node-mssql query运行 node-mssql 查询时出错
【发布时间】:2016-05-09 07:19:19
【问题描述】:

我正在尝试运行 node-mssql 查询,如果我运行简单的查询,它将被执行。但是当我使用OPENROWSETMicrosoft.ACE.OLEDB.12.0 时,它会显示一些错误。

这里是 server.js 代码

var express = require('express');
var app = express();
app.get('/', function (req, res) {

var sql = require("mssql");

// config for your database
var config = {
    user: '..',
    password: '....',
    server: 'localhost\\SQLEXPRESS', 
    database: 'test_databasae' 
};

// connect to your database
sql.connect(config, function (err) {

    if (err)
         console.log(err);
     else
        console.log("Connection successful");


    // create Request object
    var request = new sql.Request();

    // query to the database and get the records
    /*request.query('select * from table1', function (err, recordset) {

        if (err) console.log(err)

        // send records as a response
        res.send(recordset);

    });*/
    request.query('INSERT INTO [mytable](SalesPersonID,TerritoryID)' + 
                    'SELECT SalesPersonID,TerritoryID FROM OPENROWSET('  + 
                    '\'Microsoft.ACE.OLEDB.12.0\',\'Excel 12.0\';\'Database=D:\\sample\\test\\data\\1540_OPENROWSET_Examples.xls;,\'' + 
                    'SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$])',function(err,recordset){
        if(err) console.log(err)

        console.log("success");
    }); 
});});var server = app.listen(5000, function () {
console.log('Server is running..');});`

当我在命令提示符上点击 node server.js 时,我在命令提示符处收到以下错误:

Server is running..
Connection successful
{ [RequestError: Incorrect syntax near ')'.]
  name: 'RequestError',
  message: 'Incorrect syntax near \')\'.',
  code: 'EREQUEST',
  number: 102,
  lineNumber: 1,
  state: 1,
  class: 15,
  serverName: 'localhost\\SQLEXPRESS',
  procName: '',
  precedingErrors:
   [ { [RequestError: Incorrect syntax near the keyword 'SELECT'.]
       name: 'RequestError',
       message: 'Incorrect syntax near the keyword \'SELECT\'.',
       code: 'EREQUEST',
       number: 156,
       lineNumber: 1,
       state: 1,
       class: 15,
       serverName: 'localhost\\SQLEXPRESS',
       procName: '' } ] }
success

在 SQL Server Management Studio 中执行相同的查询,它成功地将 excel 数据插入数据库。Excel 工作表数据如下所示:

SalesPersonID   TerritoryID
--------        -----------
275              2
276              4
277              3

Here is the plunker link

【问题讨论】:

  • 您能否检查一下,1540_OPENROWSET_Examples.xls;,\'' 行的末尾是否有任何语法错误。我的意思是逗号需要放在\'' 之后?
  • 您好,谢谢您的回复。我按你说的试过了,还是显示出来
  • { [RequestError: Incorrect syntax near ')'.] name: 'RequestError', message: 'Incorrect syntax near \')\'.', code: 'EREQUEST', number: 102, lineNumber: 1, state: 1, class: 15, serverName: 'localhost\\SQLEXPRESS', procName: '', precedingErrors: [ { [RequestError: Incorrect syntax near ','.] name: 'RequestError', message: 'Incorrect syntax near \',\'.', code: 'EREQUEST', number: 102, lineNumber: 1, state: 1, class: 15, serverName: 'localhost\\SQLEXPRESS', procName: '' } ] }

标签: sql-server node.js excel openrowset node-mssql


【解决方案1】:

我在您的代码中发现了一些语法错误:

OPENROWSET 的示例代码是:

FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\testing.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')
  1. 在您的代码中,ExcelDatabase 关键字 ,\'Excel 12.0\';\'Database=D:\\sample ... 之间的额外 ',需要更正

  2. SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$]前后需要'

所以你的工作代码将是:

request.query('INSERT INTO [mytable](SalesPersonID, TerritoryID)' + 
                ' SELECT SalesPersonID, TerritoryID FROM OPENROWSET('  + 
                '\'Microsoft.ACE.OLEDB.12.0\', \'Excel 12.0;Database=D:\\sample\\test\\data\\1540_OPENROWSET_Examples.xls;HDR=YES\', ' + 
                '\'SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$]\')',function(err,recordset){
    if(err) console.log(err)

更新:

OP 收到此配置错误:

链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”报告错误。

要修复配置错误,需要执行以下脚本:

USE [master] 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO

【讨论】:

  • 但它给出了一些配置错误:链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”报告了错误。
  • 你能在执行代码后执行下面的查询USE [master] GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 GO
  • 嗨……我又面临一个问题。没有任何错误,来自 excel 表的数据正确存储到 sql server 数据库中,但是当我按下刷新按钮或者如果我在我的应用程序中再次转到该链接时,数据在数据库中重复。再次意味着它正在从 excel 中检索值并将相同的数据再次存储在数据库中。如何避免数据重复。你能帮我解决这个问题吗?
  • @naik3 :我对您的要求不太了解。您能否发布一个新问题(您可以链接此帖子),以便其他人可以帮助您。
  • 感谢您的建议。我将发布有关此问题的另一个问题。
猜你喜欢
  • 1970-01-01
  • 2018-11-12
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多