protected void ProcessException(Exception ex)
        {
            if (!(ex is OleDbException))
            {
                throw ex;
            }
            OleDbException dbEx       = (OleDbException)ex;
            string         errMessage = null;

            for (int iErr = 0; iErr < dbEx.Errors.Count; iErr++)
            {
                OleDbError err = dbEx.Errors[iErr];
                if (err.NativeError == 7312)
                {
                    errMessage = err.Message;
                    break;
                }
            }

            if (errMessage == null || errMessage.Length == 0)
            {
                throw ex;
            }
            if (errMessage.ToUpper().IndexOf("IGNORED") != -1)
            {
                errMessage = "  ";
            }
            else
            {
                throw ex;              // ???
            }
            // well, this is the only solution to filter  IDX IGNORED WORDS exception
            // unfortunately it's impossible to identify this error

            lblMessage.Text      = errMessage;
            lblMessage.ForeColor = Color.Red;
            m_Error          = true;
            m_HasResults     = false;
            m_VirtualCount   = 0;
            m_HasMoreResults = false;
        }
Пример #2
0
        public static void ShowBox(Exception ex, string ArgumentString = null)
        {
            string errormsg       = ex.ToString();
            string CustomMessage  = "";
            string errorLineBreak = "\r\n\r\n";

            Exception Error  = ex;
            Type      ExType = ex.GetType();

            OleDbError ErrorDb = default(OleDbError);
            bool       OleDb   = false;

            bool   link    = false;
            string linkStr = string.Empty;

            bool externalDLL = false;

            if (ExType == typeof(Exception))
            {
                if (Error.TargetSite.Module.Name == "ControleCasamentos.exe")
                {
                    //No Database File
                    if (Error.TargetSite.Name == "CreateConnection")
                    {
                        CustomMessage = "Arquivo de Banco de dados não encontrado";
                    }
                    else
                    {
                        CustomMessage = "";
                    }
                }
            }

            else if (ExType == typeof(InvalidOperationException))
            {
                Error = ((InvalidOperationException)ex);

                if (Error.TargetSite.Module.Name == "System.Data.dll")
                {
                    //Engine not Installed
                    if (Error.TargetSite.Name == "GetDataSource")
                    {
                        link    = true;
                        linkStr = "https://www.microsoft.com/en-us/download/confirmation.aspx?id=54920";

                        CustomMessage = "Motor Excel não instalado, clique em OK para ir fazer o download";
                    }

                    //Not Closed Connection
                    else if (Error.TargetSite.Name == "TryOpenConnection")
                    {
                        CustomMessage = "Falha na conexão com o Banco de Dados";
                    }
                }

                else if (Error.TargetSite.Module.Name == "System.Data.SQLite.dll")
                {
                    //Database is not Open
                    if (Error.TargetSite.Name == "InitializeForReader")
                    {
                        CustomMessage = "Banco de dados não está aberto";
                    }
                }
            }

            else if (ExType == typeof(ArgumentException))
            {
                Error = ((ArgumentException)ex);

                if (Error.TargetSite.Module.Name == "System.Data.dll")
                {
                    //Provider
                    if (Error.TargetSite.Name == "ValidateProvider")
                    {
                        CustomMessage = "Falha ao validar Provider do arquivo";
                    }
                }

                else if (Error.TargetSite.Module.Name == "System.Data.SQLite.dll")
                {
                    //Datasource
                    if (Error.TargetSite.Name == "Open")
                    {
                        CustomMessage = "Falha na conexão com o Banco de Dados";
                    }
                }
            }

            else if (ExType == typeof(FormatException))
            {
                Error = ((FormatException)ex);

                if (Error.TargetSite.Module.Name == "mscorlib.dll")
                {
                    //Conversion
                    if (Error.TargetSite.Name == "StringToNumber")
                    {
                        CustomMessage = "Falha ao converter Texto para Número:\r\n" + ArgumentString;
                    }
                    else if (Error.TargetSite.Name == "ParseExactMultiple")
                    {
                        CustomMessage = "Falha ao converter Texto para Data:\r\n" + ArgumentString;
                    }
                    else if (Error.TargetSite.Name == "ParseDouble")
                    {
                        CustomMessage = "Falha ao converter Texto para Double:\r\n" + ArgumentString;
                    }
                    else if (Error.TargetSite.Name == "Parse")
                    {
                        CustomMessage = "Falha ao converter Texto para Boolean:\r\n" + ArgumentString;
                    }
                }
            }

            else if (ExType == typeof(InvalidCastException))
            {
                Error = ((InvalidCastException)ex);

                if (Error.TargetSite.Module.Name == "System.Data.SQLite.dll")
                {
                    //Conversion
                    if (Error.TargetSite.Name == "BindParameter")
                    {
                        CustomMessage = "Falha ao converter Parâmetro:\r\n" + ArgumentString;
                    }
                }
            }

            else if (ExType == typeof(BadImageFormatException))
            {
                Error = ((BadImageFormatException)ex);

                if (Error.TargetSite.Module.Name == "System.Data.SQLite.dll")
                {
                    //No ODBC Driver installed
                    if (Error.TargetSite.Name == "sqlite3_config_none")
                    {
                        CustomMessage = "Falha na conexão com o Banco de Dados";
                    }
                }
            }

            else if (ExType == typeof(NotSupportedException))
            {
                Error = ((NotSupportedException)ex);

                if (Error.TargetSite.Module.Name == "System.Data.SQLite.dll")
                {
                    //SQLite Version
                    if (Error.TargetSite.Name == "Open")
                    {
                        CustomMessage = "Versão do SQLite incorreta";
                    }
                }
            }

            else if (ExType == typeof(FileNotFoundException))
            {
                Error = ((FileNotFoundException)ex);

                CustomMessage = "Arquivo não encontrado";
            }

            else if (ExType == typeof(DllNotFoundException))
            {
                Error = ((DllNotFoundException)ex);

                CustomMessage = "Arquivo DLL não encontrado";
            }

            else if (ExType == typeof(OleDbException))
            {
                OleDb   = true;
                ErrorDb = ((OleDbException)ex).Errors[0];

                //ISAM Extended Properties
                if (ErrorDb.NativeError == -69141536)
                {
                }

                //Opened File
                else if (ErrorDb.NativeError == -67568648)
                {
                    CustomMessage = "Arquivo já esta aberto em outro programa";
                }

                //Excel Tab Wrong Name
                else if (ErrorDb.NativeError == -537199594)
                {
                }
            }

            else if (Config.SQLiteEnable)
            {
                externalDLL = cExceptionSQLite.ShowBox(ex, ArgumentString);
            }

            else
            {
                string ExTypeStr = "ExType  : " + ExType.ToString();
                string Target    = "\r\nTarget   : " + Error.TargetSite.Module.Name;
                string Method    = "\r\nMethod : " + Error.TargetSite.Name;

                CustomMessage  = "Erro inesperado não tratado";
                CustomMessage += errorLineBreak + ExTypeStr + Target + Method;
            }

            if (link)
            {
                if (MessageBox.Show(CustomMessage + errorLineBreak + Error.Message, "Erro", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == System.Windows.Forms.DialogResult.OK)
                {
                    ProcessStartInfo sInfo = new ProcessStartInfo(linkStr);
                    Process.Start(sInfo);
                }
            }
            else if (OleDb)
            {
                MessageBox.Show(CustomMessage + errorLineBreak + ErrorDb.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (!externalDLL)
            {
                MessageBox.Show(CustomMessage + errorLineBreak + Error.Message + errorLineBreak + Error.StackTrace, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //throw new Exception(CustomMessage + errorLineBreak + Error.Message);
            }
        }