下面的代码在SQLServer上执行一系列查询,但是当我运行代码时,我有以下内容error:connectionerror:连接已关闭。与sql server的连接已打开,但是,是什么原因导致此错误?使用带有服务器配置参数的sql server打开连接时,同一事务必须执行多个查询
node.js代码:
async function invioRapportino(FilePDf, IdRapporto, IdUtente, NumeroDocumento, IdCantiere) {
var check = true;
const EmailClienti = await EmailInvioRapportino(IdCantiere);
//Fase 1: Genero il file pdf nel filesystem
var bin = Buffer.from(FilePDf, 'base64');
var nomeDocumentoTemporaneo = "./rapportino.pdf";
await fs.writeFile(nomeDocumentoTemporaneo, bin, error => {
if (error) {
check = false;
ManageError.SendError("Rapportino.js Controller: errore generazione file pdf ")
}
});
if (check == true) {
//Fase 2: procedo con l'inserimento degli articoli e del documento nel cantiere
var conn=await sql.connect(DbConfig.config);
const transaction = new sql.Transaction(conn).begin();
//transaction.begin();
var check = false;
try {
//Query che esegue l'inserimento del rapportino all'interno del db
var request = new sql.Request(transaction);
request.input("Immagine", sql.VarBinary, FilePDf);
request.input("IdRapporto", sql.VarBinary, IdRapporto);
await request.query("Update Rapporto set Immagine=@Immagine where IdRapporto=@IdRapporto");
//Carico inserisco e ristoranti nel rapportino
var ristorantiRapportini = await caricamentoRistorante(IdRapporto);
for (var i = 0; i < ristorantiRapportini.length; i++) {
var request = new sql.Request(transaction);
request.input("IdCantiere", sql.Int, IdCantiere);
request.input("ExtraPreventivo", sql.Int, 0);
request.input("RagioneSociale", sql.VarChar, ristorantiRapportini.RagioneSociale);
request.input("Data", sql.VarChar, ristorantiRapportini.Data);
request.input("Costo", sql.Money, ristorantiRapportini.Costo);
request.input("IdUtenteInserimento", sql.Int, IdUtente);
await request.query("insert into Ristorante(IdCantiere,ExtraPreventivo,RagioneSociale,Data,Costo,IdUtenteInserimento) values(@IdCantiere,@ExtraPreventivo,@RagioneSociale,@Data,@Costo,@IdUtenteInserimento)");
}
transaction.commit();
check = true;
} catch (err) {
ManageError.SendError("Errore: Inserimento rapportino Errore esecuzione query: " + err)
(await transaction).rollback();
}
if (check == true) {
//Fase 3: procedo a recuperare gli indirizzi emaila cui inviare il file PDF
var StringEmail = "";
for (var i in EmailClienti) {
var Email = EmailClienti[i].Email;
StringEmail = StringEmail + "" + EmailClienti[i].Email + ",";
}
StringEmail = StringEmail + "laura@asas.com";
nodemailer.createTestAccount((err, account) => {
if (err) {
console.log("Rapportino.js Controller: Errore invio email ");
ManageError.SendError("Rapportino.js Controller: Errore invio email " + err);
check = false;
}
//Imposto il modulo per l'invio delle email
let transporter = nodemailer.createTransport({
host: "authsmtp.securemail.pro",
port: 465,
secure: true,
auth: {
user: "smtp@ss.com",
pass: "ssss@"
}
});
//Impostazione della configurazione dell'email per l'invio del file
let mailOptions = {
from: '"ss sss',
to: StringEmail,
subject: "Rapportino N° " + NumeroDocumento,
text: "Rapportino N° " + NumeroDocumento,
html: "",
attachments: [{
path: nomeDocumentoTemporaneo
}]
};
//Se l'Email viene inviata corettamente il rapportino viene registrato nel database
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
check = false;
ManageError.SendError("Errore invio email: " + error);
console.log("Errore invio email: " + error);
}
//Eliminazione del file temporaneo
fs.unlink(nomeDocumentoTemporaneo, function(err) {
if (err) {
console.log("Errore eliminazione file temporaneo: ", err);
}
});
});
});
}
}
return check;
}
暂无答案!
目前还没有任何答案,快来回答吧!