public async Task <int> UpdateStatus(PrimaerdatenAuftragLog statusLog, int verarbeitungsKanal = 0) { using (var connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); using (var tx = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { // Get Auftrag var auftrag = await GetPrimaerdatenAuftragInternal(statusLog.PrimaerdatenAuftragId, connection); // Update the status only, if it is not already erledigt if (auftrag.Status != AufbereitungsStatusEnum.AuftragErledigt) { auftrag.Status = statusLog.Status; } auftrag.Service = statusLog.Service; auftrag.ErrorText = statusLog.ErrorText; if (verarbeitungsKanal > 0) { auftrag.Verarbeitungskanal = verarbeitungsKanal; } // If the status is "erledigt" then add other important info. if (auftrag.Status == AufbereitungsStatusEnum.AuftragErledigt) { auftrag.Abgeschlossen = true; auftrag.AbgeschlossenAm = DateTime.Now; } auftrag.ModifiedOn = DateTime.Now; await UpdateAuftrag(auftrag, connection, true); // Update log status var logId = await InsertAuftragLog(statusLog, connection); tx.Complete(); return(logId); } } }
private async Task <int> InsertAuftragLog(PrimaerdatenAuftragLog auftragLog, SqlConnection connection) { using (var cmd = connection.CreateCommand()) { cmd.CommandText = @" INSERT INTO PrimaerdatenAuftragLog (PrimaerdatenAuftragId, Status, Service, ErrorText) OUTPUT INSERTED.PrimaerdatenAuftragLogId SELECT @PrimaerdatenAuftragId, @Status, @Service, @ErrorText "; #region parameters cmd.Parameters.Add(new SqlParameter { ParameterName = "PrimaerdatenAuftragId", Value = auftragLog.PrimaerdatenAuftragId, SqlDbType = SqlDbType.Int }); cmd.Parameters.Add(new SqlParameter { ParameterName = "Status", Value = auftragLog.Status.ToString().ToDbParameterValue(), SqlDbType = SqlDbType.NVarChar }); cmd.Parameters.Add(new SqlParameter { ParameterName = "Service", Value = auftragLog.Service.ToString().ToDbParameterValue(), SqlDbType = SqlDbType.NVarChar }); cmd.Parameters.Add(new SqlParameter { ParameterName = "ErrorText", Value = auftragLog.ErrorText.ToDbParameterValue(), SqlDbType = SqlDbType.NVarChar }); #endregion return(Convert.ToInt32(await cmd.ExecuteScalarAsync())); } }