public string Update(int id, AssinaturaAnuidade a)
        {
            bool   _resultado = false;
            string _msg       = "";
            string _msgIsento = "";

            using (SqlConnection connection = new SqlConnection(strConnSql))
            {
                connection.Open();

                SqlCommand     command = connection.CreateCommand();
                SqlTransaction transaction;

                // Start a local transaction.
                transaction = connection.BeginTransaction("AtualizarAssinaturaAnuidade");

                command.Connection  = connection;
                command.Transaction = transaction;

                try
                {
                    // Passou a ter isenção:
                    if (a.PagamentoIsento == true & a.PagamentoIsentoBD == false)
                    {
                        a.DtIsencao = DateTime.Now;
                    }

                    string _data = "";
                    if (a.DtInicioProcessamento != null)
                    {
                        _data = " DtInicioProcessamento = @DtInicioProcessamento, ";
                    }

                    string _data2 = "";
                    if (a.DtIsencao != null)
                    {
                        _data2 = " DtIsencao = @DtIsencao, ";
                    }

                    command.CommandText = "" +
                                          "UPDATE dbo.AD_Assinatura_Anuidade " +
                                          "SET ValorAnuidadeId = @ValorAnuidadeId, " +
                                          "   AnoInicio = @AnoInicio, AnoTermino = @AnoTermino, " +
                                          "   PercentualDesconto  = @PercentualDesconto, TipoDesconto = @TipoDesconto, " +
                                          "   Valor = @Valor, DtVencimentoPagamento = @DtVencimentoPagamento, " +
                                          "   DtAtualizacao = @DtAtualizacao, CodePS = @CodePS, DtCodePS = @DtCodePS, " +
                                          "   Reference = @Reference, EmProcessoPagamento = @EmProcessoPagamento, " +
                                          "   " + _data + "" + _data2 + "Ativo = @Ativo, PagamentoIsento = @PagamentoIsento, ObservacaoIsencao = @ObservacaoIsencao " +
                                          "WHERE AssinaturaAnuidadeId = @id";

                    command.Parameters.AddWithValue("ValorAnuidadeId", a.ValorAnuidadeId);
                    command.Parameters.AddWithValue("AnoInicio", a.AnoInicio);
                    command.Parameters.AddWithValue("AnoTermino", a.AnoTermino);
                    command.Parameters.AddWithValue("PercentualDesconto", a.PercentualDesconto);
                    command.Parameters.AddWithValue("TipoDesconto", a.TipoDesconto);
                    command.Parameters.AddWithValue("Valor", a.Valor);
                    command.Parameters.AddWithValue("DtVencimentoPagamento", a.DtVencimentoPagamento);
                    command.Parameters.AddWithValue("DtAtualizacao", DateTime.Now);
                    command.Parameters.AddWithValue("CodePS", a.CodePS);
                    command.Parameters.AddWithValue("DtCodePS", a.DtCodePS);
                    command.Parameters.AddWithValue("Reference", a.Reference);
                    command.Parameters.AddWithValue("EmProcessoPagamento", a.EmProcessoPagamento);
                    command.Parameters.AddWithValue("Ativo", a.Ativo);
                    command.Parameters.AddWithValue("PagamentoIsento ", a.PagamentoIsento);
                    command.Parameters.AddWithValue("ObservacaoIsencao ", a.ObservacaoIsencao);

                    command.Parameters.AddWithValue("id", id);

                    if (_data != "")
                    {
                        command.Parameters.AddWithValue("DtInicioProcessamento", a.DtInicioProcessamento);
                    }

                    if (_data2 != "")
                    {
                        command.Parameters.AddWithValue("DtIsencao", a.DtIsencao);
                    }

                    int x = command.ExecuteNonQuery();
                    _resultado = x > 0;

                    _msg = x > 0 ? "Atualização realizada com sucesso" : "Atualização NÃO realizada com sucesso";

                    transaction.Commit();

                    if (x > 0)
                    {
                        Recebimento recebimento = new Recebimento();

                        recebimento = new Recebimento
                        {
                            AssinaturaAnuidadeId = a.AssinaturaAnuidadeId,
                            DtVencimento         = a.DtVencimentoPagamento,
                            StatusPS             = 0,
                            GrossAmountPS        = 0,
                            DiscountAmountPS     = 0,
                            FeeAmountPS          = 0,
                            NetAmountPS          = 0,
                            ExtraAmountPS        = 0,
                            StatusFBTC           = "3",
                            OrigemEmissaoTitulo  = "2",
                            NotificationCodePS   = a.Reference,
                            Ativo = a.PagamentoIsento
                        };

                        //Avaliar se houve alteração na isenção
                        if (a.PagamentoIsento == true & a.PagamentoIsentoBD == false)
                        {
                            RecebimentoRepository recebimentoRepository = new RecebimentoRepository();
                            _msgIsento = recebimentoRepository.UpdateRecebimentoIsencao(0, recebimento);
                        }

                        // desativo os dados na tabela de pagamento:
                        if (a.PagamentoIsento == false & a.PagamentoIsentoBD == true)
                        {
                            RecebimentoRepository recebimentoRepository = new RecebimentoRepository();
                            _msgIsento = recebimentoRepository.DeleteRecebimentoIsencao(a.AssinaturaAnuidadeId, 0);
                        }
                    }

                    // Log do UPDATE ASSINATURA_ANUIDADE:
                    StringBuilder sb = new StringBuilder();
                    sb.Append("Parâmetros: ");

                    for (int z = 0; z < command.Parameters.Count; z++)
                    {
                        sb.Append(command.Parameters[z].ParameterName + ": " + command.Parameters[z].Value + ", ");
                    }

                    _instrucaoSql = sb.ToString();
                    _result       = x > 0 ? "SUCESSO" : "FALHA";

                    string log = logRep.SetLogger(className + "/Update",
                                                  "UPDATE", "ASSINATURA_ANUIDADE", id, _instrucaoSql, _result);
                    //Fim do Log
                }
                catch (Exception ex)
                {
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        _msg = $"ATENÇÃO: Ocorreu um erro ao tentar ATUALIZAR ASSINATURA_ANUIDADE: Commit Exception Type:{ex2.GetType()}. Erro:{ex2.Message}";
                        // throw new Exception($"Rollback Exception Type:{ex2.GetType()}. Erro:{ex2.Message}");
                    }

                    string log = logRep.SetLogger(className + "/Update",
                                                  "UPDATE", "ASSINATURA_ANUIDADE", 0, ex.Message, "FALHA");

                    _msg = $"ATENÇÃO: Ocorreu um erro ao tentar ATUALIZAR ASSINATURA_ANUIDADE: Commit Exception Type:{ex.GetType()}. Erro:{ex.Message}";
                    // throw new Exception($"Commit Exception Type:{ex.GetType()}. Erro:{ex.Message}");
                }
                finally
                {
                    connection.Close();
                }
            }
            return(_msg);
        }