예제 #1
0
        /// <summary>
        ///     Save error inside the log database.
        /// </summary>
        /// <param name="TituloErro"></param>
        /// <param name="Acao"></param>
        /// <param name="TipoErro"></param>
        /// <param name="MsgAux"></param>
        /// <param name="Ex"></param>
        private void SaveError(String TituloErro, String Acao, e_TipoErroEx TipoErro, String MsgAux, Exception Ex)
        {
            //Dicionário contendo os parâmetros do insert.
            Dictionary <String, object> dic = new Dictionary <string, object>();

            dic.Add("@APP", "Edgecam Manager Service sync");
            dic.Add("@APPVER", Application.ProductVersion);
            dic.Add("@FORMNAME", DBNull.Value);
            dic.Add("@ACAO", Acao);
            dic.Add("@MSG", String.IsNullOrEmpty(MsgAux) == true ? "<None>" : MsgAux);
            dic.Add("@USER", Environment.UserName);
            dic.Add("@DATA", DateTime.Now);
            dic.Add("@TIPOERRO", (int)TipoErro);
            dic.Add("@TITLE", TituloErro);

            if (Ex != null)
            {
                dic.Add("@EXTIPOERRO", Ex.GetType().ToString());

                /*
                 *  Dionei Beilke dos Santos
                 *  21/08/2018, at 12:43 AM
                 *  Adicionei as condições abaixo, pois estava salvando somente o primeiro nível
                 * da exceção. Agora, o sistema trata, gera um arquivo temporário e armazena o log
                 * no banco de dados.
                 */
                CustomException skaEx       = new CustomException(Ex, Ex.Message, false);
                String          stackStrace = System.IO.File.ReadAllText(skaEx._DiretorioArquivoLog);
                System.IO.File.Delete(skaEx._DiretorioArquivoLog);

                dic.Add("@EXSTACKRACE", stackStrace);

                //Caso ser um erro provido em um banco de dados, pego o número (para abrir uma investigação posteriormente).
                if (Ex.GetType().ToString() == "Oracle.DataAccess.Client.OracleException")
                {
                    String errorCode = Ex.GetType().GetProperty("Number").ToString();

                    dic.Add("@EXERRORCODE", errorCode);
                }
                else if (Ex.GetType().ToString() == "SqlClient.SqlException")
                {
                    String errorCode = Ex.GetType().GetProperty("Number").ToString();

                    dic.Add("@EXERRORCODE", errorCode);
                }
                else
                {
                    dic.Add("@EXERRORCODE", "<None>");
                }

                dic.Add("@COMMENTUSER", DBNull.Value);
                dic.Add("@QUERY", DBNull.Value);
            }
            else
            {
                dic.Add("@EXTIPOERRO", "");
                dic.Add("@EXSTACKRACE", "");
                dic.Add("@EXERRORCODE", "");
                dic.Add("@COMMENTUSER", DBNull.Value);
                dic.Add("@QUERY", DBNull.Value);
            }



            //Grava a exceção no banco de dados.
            mCnnBancoLog.ExecutaSql(QueriesSQL.INSERE_NOVA_EXCECAO, dic);
        }
예제 #2
0
    /// <summary>
    ///     Cadastra um novo log no banco de dados auxiliar (Banco específico para LOGS) apresentando ou
    /// não uma interface para o usuário preencher com alguma informação adicional.
    /// </summary>
    /// <param name="MostrarTela">True para exibir a tela para o usuário adicionar um comentário.</param>
    /// <param name="TituloErro">Título da mensagem que será apresentada ao usuário</param>
    /// <param name="NomeInterface">Nome do Formulário (Form)</param>
    /// <param name="Acao">Qual evento/método que gerou a exceção</param>
    /// <param name="MsgAux">Mensagem auxiliar (descritivo) do motivo que pode ter gerado a exceção (pode passar vazio como parâmetro).</param>
    /// <param name="QuerySql">Nome da consulta SQL realizada (caso houver)</param>
    /// <param name="TipoErro">Tipo de erro que gerou (aviso, informação, erro)</param>
    /// <param name="ex">Exceção gerada pelo sistema.</param>
    public static void CadastraNovoLog(Boolean MostrarTela, String TituloErro, String NomeInterface, String Acao, String MsgAux, String QuerySql, e_TipoErroEx TipoErro, Exception ex = null)
    {
        //Dicionário contendo os parâmetros do insert.
        Dictionary <String, object> dic = new Dictionary <string, object>();

        if (MostrarTela)
        {
            FrmErroInesperado frm = new FrmErroInesperado(TituloErro);
            frm.ShowDialog();

            dic.Add("@APP", Application.ProductName);
            dic.Add("@APPVER", Application.ProductVersion);
            dic.Add("@FORMNAME", NomeInterface);
            dic.Add("@ACAO", Acao);
            dic.Add("@MSG", String.IsNullOrEmpty(MsgAux) == true ? "<None>" : MsgAux);
            dic.Add("@USER", Objects.UsuarioAtual != null ? Objects.UsuarioAtual.Login : Environment.UserName);
            dic.Add("@DATA", DateTime.Now);
            dic.Add("@TIPOERRO", (int)TipoErro);
            dic.Add("@TITLE", TituloErro);

            if (ex != null)
            {
                dic.Add("@EXTIPOERRO", ex.GetType().ToString());

                /*
                 *  Dionei Beilke dos Santos
                 *  21/08/2018, at 12:43 AM
                 *  Adicionei as condições abaixo, pois estava salvando somente o primeiro nível
                 * da exceção. Agora, o sistema trata, gera um arquivo temporário e armazena o log
                 * no banco de dados.
                 */
                CustomException skaEx       = new CustomException(ex, ex.Message, false);
                String          stackStrace = System.IO.File.ReadAllText(skaEx._DiretorioArquivoLog);
                System.IO.File.Delete(skaEx._DiretorioArquivoLog);

                dic.Add("@EXSTACKRACE", stackStrace);

                //Caso ser um erro provido em um banco de dados, pego o número (para abrir uma investigação posteriormente).
                if (ex.GetType().ToString() == "Oracle.DataAccess.Client.OracleException")
                {
                    String errorCode = ex.GetType().GetProperty("Number").ToString();

                    dic.Add("@EXERRORCODE", errorCode);
                }
                else if (ex.GetType().ToString() == "SqlClient.SqlException")
                {
                    String errorCode = ex.GetType().GetProperty("Number").ToString();

                    dic.Add("@EXERRORCODE", errorCode);
                }
                else
                {
                    dic.Add("@EXERRORCODE", "<None>");
                }

                dic.Add("@COMMENTUSER", frm._ComentarioUsuario);
                dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql);
            }
            else
            {
                dic.Add("@EXTIPOERRO", "");
                dic.Add("@EXSTACKRACE", "");
                dic.Add("@EXERRORCODE", "");
                dic.Add("@COMMENTUSER", frm._ComentarioUsuario);
                dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql);
            }
        }
        else
        {
            dic.Add("@APP", Application.ProductName);
            dic.Add("@APPVER", Application.ProductVersion);
            dic.Add("@FORMNAME", NomeInterface);
            dic.Add("@ACAO", Acao);
            dic.Add("@MSG", MsgAux);
            dic.Add("@USER", Objects.UsuarioAtual.Login != "" ? Objects.UsuarioAtual.Login : "");
            dic.Add("@DATA", DateTime.Now);
            dic.Add("@TIPOERRO", (int)TipoErro);
            dic.Add("@TITLE", TituloErro);

            if (ex != null)
            {
                dic.Add("@EXTIPOERRO", ex.GetType().ToString());
                dic.Add("@EXSTACKRACE", ex.StackTrace);

                //Caso ser um erro provido em um banco de dados, pego o número (para abrir uma investigação posteriormente).
                if (ex.GetType().ToString() == "Oracle.DataAccess.Client.OracleException")
                {
                    String errorCode = ex.GetType().GetProperty("Number").ToString();

                    dic.Add("@EXERRORCODE", errorCode);
                }
                else if (ex.GetType().ToString() == "SqlClient.SqlException")
                {
                    String errorCode = ex.GetType().GetProperty("Number").ToString();

                    dic.Add("@EXERRORCODE", errorCode);
                }
                else
                {
                    dic.Add("@EXERRORCODE", "<None>");
                }

                dic.Add("@COMMENTUSER", "");
                dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql);
            }
            else
            {
                dic.Add("@EXTIPOERRO", "");
                dic.Add("@EXSTACKRACE", "");
                dic.Add("@EXERRORCODE", "");
                dic.Add("@COMMENTUSER", "");
                dic.Add("@QUERY", String.IsNullOrEmpty(QuerySql) == true ? "<None>" : QuerySql);
            }
        }
        //Grava a exceção no banco de dados.
        Objects.CnnBancoLog.ExecutaSql(Consultas_Log.INSERE_NOVA_EXCECAO, dic);

        if (MostrarTela)
        {
            System.Windows.Forms.MessageBox.Show("Obrigado pela sua colaboração em melhorar o sistema", "Relatório recebido com êxito",
                                                 System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
        }
    }