none
Retornar exception sql para exibir na tela da aplicação RRS feed

  • Pergunta

  • Olá a Todos!

    Tenho uma aplicação em WPF que cada transação chama um WCF que chama os métodos em uma classe (DAL) com todos os acessos ao banco e retorna pra aplicação.

    Por Exemplo:

    Na aplicação:

    using (TransactServiceClient service = new TransactServiceClient())
                {
                    try
                    {
                        lvAniversarios.Items.Clear();
                        List<Cliente> lista = service.Lista_Clientes().Where(l => l.Dt_Nasc.Month == DateTime.Today.Month && l.Dt_Nasc.Day >= DateTime.Today.Day).ToList();
                        lista = lista.OrderBy(e => e.Dt_Nasc.Day).ThenBy(e => e.Dt_Nasc.Month).ToList();
                        for (int j = 0; j < lista.Count; j++)
                        {
                            if (lista[j].Dt_Nasc.Month == DateTime.Today.Month && lista[j].Dt_Nasc.Day == DateTime.Today.Day)
                            {
                                ListViewItem item = new ListViewItem();
                                item.Content = lista[j].Dt_Nasc.Day.ToString().PadLeft(2, '0') + "/" + lista[j].Dt_Nasc.Month.ToString().PadLeft(2, '0') + " - " + lista[j].Nome;
                                item.Foreground = new SolidColorBrush(Colors.Yellow);
                                lvAniversarios.Items.Add(item);
                            }
                            else
                                lvAniversarios.Items.Add(lista[j].Dt_Nasc.Day.ToString().PadLeft(2, '0') + "/" + lista[j].Dt_Nasc.Month.ToString().PadLeft(2, '0') + " - " + lista[j].Nome);
                        }
                        lvAniversarios.SelectionMode = SelectionMode.Single;
                    }
                    catch (Exception ex)
                    {
                        service.Abort();
                        MessageBox.Show(ex.ToString(),"Erro!");
                    }
                }            

    No Serviço

    [ServiceContract]
        public class TransactService
        {
            [OperationContract]
            public List<Cliente> Lista_Clientes()
            {
                return DALC.Lista_Clientes();
            }
    }

    Na DALC.

     public static List<Cliente> Lista_Clientes()
            {
                using (SqlConnClass.obterConexao())
                {
                    try
                    {
                        SqlCommand com = new SqlCommand("select * from Clientes", SqlConnClass.obterConexao());
                        var reader = com.ExecuteReader();
                        DataTable dt = new DataTable();
                        dt.Load(reader);
                        List<Cliente> lista_cliente = new List<Cliente>();
                        foreach (DataRow row in dt.Rows)
                        {
                            lista_cliente.Add(BindCliente(row));
                        }
                        return lista_cliente;
                    }
                    catch (SqlException ex)
                    {
                        throw ex;
                    }
                }
            }

    Gostaria de saber uma forma de exibir uma exception SQL, quando ocorrer, que acontecer na DAL na tela do usuário da aplicação WPF. No retorno do método do WCF creio que não vai rolar pois todos os meus operations contracts da WCF retornam sempre um tipo lista.

    Obrigado

    domingo, 10 de janeiro de 2016 16:40

Todas as Respostas

  • Nunca utilizei dessa forma, pessoalmente, sempre utilizei uma mensagem genérica, e a mensagem de erro real, eu gravo em um arquivo de log através do próprio serviço.
    segunda-feira, 11 de janeiro de 2016 16:40
  • Use os exception de SQL para o cacth

          try
            {
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    errorMessages.Append("Index #" + i + "\n" +
                        "Message: " + ex.Errors[i].Message + "\n" +
                        "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                        "Source: " + ex.Errors[i].Source + "\n" +
                        "Procedure: " + ex.Errors[i].Procedure + "\n");
                }
                Console.WriteLine(errorMessages.ToString());
            }




    If the answer was helpful vote


    • Editado Jean LLopes terça-feira, 12 de janeiro de 2016 00:12
    • Sugerido como Resposta Jean LLopes terça-feira, 12 de janeiro de 2016 00:13
    terça-feira, 12 de janeiro de 2016 00:11