2016-05-09 8 views
1

Я пытаюсь запустить запрос node-mssql, если я запускаю простые запросы, он запускается. Но когда я использую OPENROWSET и Microsoft.ACE.OLEDB.12.0, он показывает некоторые ошибки.Ошибка при запуске запроса node-mssql

Вот 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..');});` 

и когда я ударил узел 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

+0

Не могли бы вы проверить, есть ли какая-либо ошибка синтаксиса в конце строки '1540_OPENROWSET_Examples.xls;, \«» '. Я имею в виду, что запятая необходимо разместить после '\ '''? – Arulkumar

+0

Привет, спасибо, что ответили. Я попытался, как сказал, все еще показывает – naik3

+0

'{[RequestError: Неверный синтаксис рядом с ')'.] имя: 'RequestError', сообщение: 'Неверный синтаксис рядом' '\'. ', Код:' EREQUEST», номер: 102, LineNumber: 1, состояние: 1, класс: 15, имя_сервера: 'локальный \\ SQLEXPRESS', PROCNAME: '', precedingErrors: [{[RequestError: Неправильный синтаксис near ','.] name: 'RequestError', сообщение: 'Неверный синтаксис рядом с \', \ '.», код: 'EREQUEST', номер: 102, LineNumber: 1, состояние: 1, класс: 15, имя_сервера: 'локальный \\ SQLEXPRESS', PROCNAME: ''}]}' – naik3

ответ

1

Я вижу несколько синтаксических ошибок в коде:

Пример кода для OPENROWSET является:

FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\testing.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]') 
  1. В коде дополнительные ' между Excel и Database ключевые слова ,\'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) 

Update:

ОП получил эту ошибку конфигурации:

The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error.

Чтобы исправить тыс Ошибка конфигурации е, ниже сценарий необходимо выполнить:

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 
+0

Спасибо вы очень за ваш ответ .. Я попробую сейчас – naik3

+0

Большое спасибо ... код работает без синтаксических ошибок .. спасибо. – naik3

+0

Но это приводит к некоторой ошибке конфигурации: поставщик OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)» сообщил об ошибке. – naik3