我正在尝试将 Excel 文件加载到 SQL Server 表,但出现错误。我已经分享了相同的代码和错误。请指出这里有什么问题。
Excel 文件由 4 列 ID、日期、型号和计划组成,我想将其插入到 mssql 表中,但无法执行此操作。
//CODE
var express = require('express');
var http = require('http');
var oracledb = require('oracledb');
//var dbConfig = require('./dbconfig.js');
var app = express();
var bodyParser = require('body-parser');
var XLSX = require('xlsx');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const Cors = require("cors");
app.use(Cors());
jsonArrayToValueArray = (jsonArray) => {
let valueArray = new Array();
for (let index = 0; index < jsonArray.length; index++) {
let object = jsonArray[index];
let keys = Object.keys(object);
valueArray.push([object[keys[0]], object[keys[1]], object[keys[2]], object[keys[3]]]);
console.log(valueArray) ;
}
return valueArray;
}
app.get('/', function (req, res) {
var sql = require("mssql");
// Configuration object for your database
var config = {
user: 'sa',
password: '******',
database: '*****',
server: '*******',
port: 1433,
//timezone: 'utc',
//multipleStatements: true
};
// connect to the database
sql.connect(config, function (err) {
var workbook = XLSX.readFile(__dirname + '/uploads/delivery_excel.xlsx');
var sheet_name_list = workbook.SheetNames;
var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
console.log();
let valueArray = jsonArrayToValueArray(xlData);
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.query("INSERT INTO dbo.plan_excel Values(' + _Id + ', ' + _Date + ', ' + _Model + ', ' + _Plan + ')", [valueArray], function (err, recordset) {
// request.query("INSERT INTO dbo.plan_excel Values(@Id, @Date, @Model, @Plan) ", [valueArray], function (err, recordset) {
if (err) console.log(err)
// send records as a response
res.send(recordset);
sql.close();
});
});
});
var server = app.listen(5050, function () {
console.log('Server is running..');
});
我收到的错误如下,一个 38 行数组(excel 数据),后跟一个错误。请帮助我进行此代码工作所需的更改,以便将数据插入到 SQL Server 中。我正在使用该插入查询并引用其他几个链接,如果这不是正确的方法,请告诉我。
我之前已经实现了相同的流程,但它是针对 Mysql 数据库的,因为我是 sql server 的新手,所以对此不太了解。
[ 28, 43295, 'V45', 200 ],
[ 29, 43296, 'V45', 200 ],
[ 30, 43297, 'V45', 200 ],
[ 31, 43298, 'V45', 200 ],
[ 32, 43299, 'V45', 200 ],
[ 33, 43299, 'V30', 213 ],
[ 34, 43299, 'V26', 220 ],
[ 35, 43299, 'V22', 200 ],
[ 36, 43299, 'V34', 233 ],
[ 37, 42895, 'v35', 123 ],
[ 38, 42895, 'V32', 122 ] ]
(node:40820) UnhandledPromiseRejectionWarning: RequestError: Conversion failed when converting the varchar value ' + _Id + ' to data type int.
at handleError (C:\Users\vishruti.pawar\.vscode\mssql_api\node_modules\mssql\lib\tedious.js:566:15)
at emitOne (events.js:116:13)
at Connection.emit (events.js:211:7)
at Parser.tokenStreamParser.on.token (C:\Users\vishruti.pawar\.vscode\mssql_api\node_modules\tedious\lib\connection.js:716:12)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at Parser.parser.on.token (C:\Users\vishruti.pawar\.vscode\mssql_api\node_modules\tedious\lib\token\token-stream-parser.js:27:14)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at addChunk (C:\Users\vishruti.pawar\.vscode\mssql_api\node_modules\readable-stream\lib\_stream_readable.js:297:12)
(node:40820) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:40820) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate
the Node.js process with a non-zero exit code.
我已经分享了备用代码,它正在将记录发送到数据库,但是一些随机记录正在发送到那里,您能告诉我可能是什么错误吗?我正在使用 for 循环将这些值添加到表中。
var express = require('express');
var http = require('http');
var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');
var app = express();
var bodyParser = require('body-parser');
var XLSX = require('xlsx');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const Cors = require("cors");
app.use(Cors());
jsonArrayToValueArray = (jsonArray) => {
let valueArrayN = new Array();
let valueArray = new Array();
let valueArray1 = new Array();
let valueArray2 = new Array();
let valueArray3 = new Array();
for (let index = 0; index < jsonArray.length; index++) {
let object = jsonArray[index];
let keys = Object.keys(object);
valueArray.push([object[keys[0]]])
valueArray1.push([object[keys[1]]])
valueArray2.push( [object[keys[2]]])
valueArray3.push( [object[keys[3]]])
//valueArrayN.push([object[keys[0]], object[keys[1]], object[keys[2]], object[keys[3]]]);
console.log(valueArrayN) ;
}
valueArrayN = [valueArray, valueArray1, valueArray2, valueArray3];
return valueArrayN;
}
app.get('/', function (req, res) {
var sql = require("mssql");
var config = {
user: 'sa',
password: '******',
database: '*****',
server: 'localhost',
port: 1433,
timezone: 'utc',
multipleStatements: true
};
// connect to the database
sql.connect(config, function (err) {
var workbook = XLSX.readFile(__dirname + '/uploads/delivery_excel.xlsx');
var sheet_name_list = workbook.SheetNames;
var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
console.log();
let valueArrayN = jsonArrayToValueArray(xlData);
var i;
for(i=0; i < 45; i++)
{
if (err) console.log(err);
// create Request object
var request = new sql.Request();
//setTimeout(function(){
request.input('id', sql.Int, valueArrayN[0][da])
request.input('Date', sql.Int, valueArrayN[1][da])
request.input('Model', sql.NChar,valueArrayN[2][da])
request.query("INSERT INTO dbo.plan_excel Values (@id, @Date, @Model)", function (err, recordset) {
if (err) console.log(err)
res.send(recordset);
});
} //for loop
});
});
var server = app.listen(5010, function () {
console.log('Server is running..');
});
对于此代码,我收到以下错误,每次运行时都会插入不同的记录,例如有时 11 条记录有时仅 4 条记录。这可能是什么原因?
[]
[]
[]
_http_outgoing.js:494
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:494:11)
at ServerResponse.setHeader (_http_outgoing.js:501:3)
at ServerResponse.header (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\express\lib\response.js:767:10)
at ServerResponse.send (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\express\lib\response.js:267:15)
at ServerResponse.send (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\express\lib\response.js:158:21)
at C:\Users\.vscode\MSSQL\oracle_api_working\example2.js:95:17
at _query (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\mssql\lib\base.js:1347:9)
at Request.tds.Request.err [as userCallback] (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\mssql\lib\tedious.js:671:15)
at Request.callback (C:\Users\.vscode\MSSQL\oracle_api_working\node_modules\tedious\lib\request.js:37:27)
PS C:\Users\.vscode\MSSQL\oracle_api_working>
最佳答案
将您的 request.query 行替换为此。
request.query("INSERT INTO dbo.plan_excel Values ${valueArray.join().split(",").map(x => '(' + x + ')').join()}", function (err, recordset) {
关于node.js - 使用node.js将数据从Excel加载到sql server表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57654679/