2015-12-20 2 views
-1

У меня есть следующий код:Пользовательские исключения и бросьте C#

public DataTable executeQuery(string querySql, List<MySqlParameter> parameters) 
    { 
     try 
     { 
      using (connectionLocal = getConnection()) 
      { 
       connectionLocal.Open(); 
       MySqlCommand command = new MySqlCommand(querySql, connectionLocal); 
       command.CommandType = System.Data.CommandType.Text; 

       foreach (MySqlParameter param in parameters) 
       { 
        command.Parameters.Add(param); 
       } 

       MySqlDataAdapter dataAdapter = new MySqlDataAdapter(command); 
       DataTable dataTable = new DataTable(); 
       dataAdapter.Fill(dataTable); 
       dataTable.TableName = "tabla"; 
       return dataTable; 
      } 
     } 
     catch (Exception e) 
     { 
      throw new DAOException("tst",e); 
      //return null; 
     } 
    } 

и ...

public class DAOException : Exception 
{ 
    public DAOException(String msg, Exception inner) 
     : base(msg, inner) 
    { 
     MessageBox.Show("Ocurrio un problema... Por favor contacta al administrador!"); return; 
    } 

} 

Но следующий, когда происходит исключение, оказывается:

http://s17.postimg.org/6quh6xs6n/daoex.png

Я хотел бы знать, как правильно использовать пробную попытку.

спасибо !!!

+0

инспектировать 'e.Message' и' e.InnerException' – Shyju

+0

@Shyju Где? В DAOException? –

ответ

0

В блоке catch вы поймаете Исключение, которое было выброшено ранее, затем вы бросаете новое DAOException, с которым вы никуда не обращаетесь.

Что именно вы хотите сделать?

+0

Я хочу показать сообщение об ошибке и прекратить выполнение программы. Как я мог попробовать это в классе DAOException? –

+0

Лично я думаю, что вам действительно не нужен ваш собственный класс Exception, в блоке catch вам просто нужно показать MessageBox и выйти из вашей программы. Конечно, вы также можете сделать это с помощью собственного класса Exception, тогда вам нужно обработать брошенное CustomException, чтобы иметь возможность показывать свой собственный MessageBox, а не .NET. (После необработанного Исключения.NET показывает сообщение об ошибке, которое вы не можете контролировать, поэтому вам нужно также обрабатывать свой пользовательский исключение.) – szkup

+0

Спасибо за ваш ответ. Как можно обработать исключение в классе DAOException, чтобы избежать необработанного исключения? –

0

Если вы хотите просто войти сообщение об ошибке или показать его пользователь вы можете изменить свой улов блока с помощью MessageBox вызова:

catch (Exception e) 
{ 
    MessageBox.Show("Ocurrio un problema... Por favor contacta al administrador!"); 
    return null; // or Application.Exit(); or other code you want 
} 

Существует guideline об исключении метания проектирования и кэширования. Помните, что ваши данные в памяти и текущем контексте могут быть повреждены после того, как выбрано исключение. Затем вы должны обработать этот сценарий или прекратить действие приложения.

Есть many материалы о exception handling и это действительно более тема ответа. Например, неплохо было бы показать хотя бы сообщение об исключении для пользователя или информацию об исключении журнала в файл журнала для будущей отладки.

1

Место в handle Исключением является блок catch, а не сам класс исключения. Таким образом, вы можете показать свой MessageBox в своем блоке catch и прекратить свое приложение (например, через Application.Exit()).

Класс Exception является не чем иным, как контейнером данных, который может принимать информацию об ошибке, которая произошла. Бросив это исключение, вы говорите: «Я не могу справиться с этой ситуацией, кто-то другой (вызывающий) должен позаботиться об этом!» И вы используете класс Exception, чтобы предоставить информацию о том, что происходит и где.

Код может (или хочет) обрабатывать это исключение, реализует блоки try....catch. Он ловит исключение и, например, регистрирует информацию, такую ​​как Message и StackTrace.

Если исключение не перехвачено кем-либо, он в конечном счете крах всего приложения и операционная система будет заботиться путем создания свалок и т.д.

Смежные вопросы