Javascript NodeJS数据库更新查询?
当我使用这段代码时,它只更新数据库中第一个值。它在循环上不起作用;只有一行受影响。我想更新所有的行。如何从表中选择列值并将其更新为循环中的其他列值 异步循环方法:-Javascript NodeJS数据库更新查询?,javascript,mysql,node.js,Javascript,Mysql,Node.js,当我使用这段代码时,它只更新数据库中第一个值。它在循环上不起作用;只有一行受影响。我想更新所有的行。如何从表中选择列值并将其更新为循环中的其他列值 异步循环方法:- function readData () { return new Promise (function(resolve,rejection){ conn.connect().then(function () { var request = new sql.Request(conn
function readData () {
return new Promise (function(resolve,rejection){
conn.connect().then(function () {
var request = new sql.Request(conn);
request.query('Select * FROM demo Order by id ;', function (err, data) {
if (err) { console.log(err) }
else {
try {
resolve(data)
conn.close();
}
catch (err) {
console.log(err);
}
}
});
});
});
}
function writedata() {
return new Promise(function (resolve, rejection) {
let count = 0
asyncLoop(temp, function (item, next){
asyncLoop(id,function(newitem,newnext){
conn.close();
conn.connect().then(function () {
var request = new sql.Request(conn);
console.log(item);
console.log(newitem);
request.input("language", sql.VarChar, item)
request.input("id", sql.SmallInt, newitem)
request.query('update demo set ru = @language where id = @id ;', function (err, data) {
if (err) {
console.log(err)
} else {
try {
count++
conn.close();
if (count == 4) {
resolve(data)
}
} catch (err) {
console.log(err);
}
next();
newnext();
}
});
});
});
});
});
}
readData().then(function (data) {
for (var i = 1; i < 5; i++) {
temp.push(data['recordset'][i]['EN']);
id.push(data['recordset'][i]['ID']);
}
writedata().then(function (data) {
console.log(data);
});
});
使用asyncloop更新了代码,但出现了一些循环问题请尝试下面的代码,如果有任何错误,请通知我。另外,根据需要修改计数值:
function writedata() {
return new Promise(function (resolve, rejection) {
let count = 0
for (i = 0; i < 5; i++) {
conn.close();
conn.connect().then(function () {
var request = new sql.Request(conn);
console.log(temp[i]);
console.log(id[i]);
request.input("language", sql.VarChar, temp[i])
request.input("id", sql.SmallInt, id[i])
request.query('update demo set ru = @language where id = @id ;', function (err, data) {
if (err) {
console.log(err)
} else {
try {
count++
conn.close();
if(count == 5)
resolve()
} catch (err) {
console.log(err);
}
}
});
});
}
});
}
尝试下面的代码,我希望它有帮助
let updateData= []
let updateDataRows = async (tmp, identifier) => {
console.log('updating row',tmp,identifier);
conn.close();
await conn.connect();
let request = new sql.request(conn);
console.log(tmp);
console.log(identifier);
request.input("language", sql.varchar, tmp)
request.input("id", sql.smallint, identifier)
let data = await request.query('update demo set ru = @language where id = @id ;')
conn.close();
return data;
}
let writedata = async () => {
let resData = await Promise.all(updateData.map(async (d) => {
return await updateDataRows(d.temp, d.id)
}));
return resData;
}
readData().then(function (data) {
for (var i = 1; i < 5; i++) {
updateData.push({
temp: data['recordset'][i]['EN'],
id: data['recordset'][i]['ID']
})
}
writedata.then(data => {
}, err => {
})
});
请尝试Asyncloop而不是for loop。下面是相同的语法
asyncLoop(ARRAY, function(item, next) {
[Function/Operation block]
next();
}
});
}, function(error) {
[Error Handling Block]
});
首先,使用另一个文件或全局对象来设置连接。然后打印sql查询并将其运行到phpmyadmin或其他要检查的内容中。在查询之前还要打印@id,这样我们就可以检查细节了。@Sagar我用第二种方法作为标题更新了代码,它也只更新了一个方法row@Sagar更新了代码,请检查它是否正常工作,它是否在控制台中打印未定义未定义您忘记将参数设置为函数。函数writedata,它应该是函数writeDataMP,id@DHIRAJKATEKAR我已经将数组作为全局变量,那么为什么选择参数呢?@DHIRAJKATEKAR请在问题中添加Check@Sagar代码不工作,在控制台中未定义它只是循环并在控制台和节点中打印值。请检查上面的代码一些小循环问题,看看是否可以纠正