Я создаю слой доступа к данным, в котором я хочу обрабатывать исключения, которые должны отслеживаться бизнес-уровнем с четким представлением об источнике исключения.
Я делаю что-то вроде этого ..
РЕДАКТИРОВАТЬ
private void OpenConnection()
{
if (ConnectionState.Closed == _connection.State)
_connection.Open();
}
В приведенном выше коде я знаю причину исключения. И хочу бросить это, чтобы быть обработанным в BL, чтобы отобразить сообщение.
Но я использую эту функцию в DL только с другой строкой кода.
protected DataTable GetDataTable(string Query)
{
DataTable dt =new DataTable();
SqlCommand cmd = InitializeCommand(Query);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
try
{
OpenConnection();
adp.Fill(dt);
CloseConnection(true);
return dt;
}
catch (SqlException ex)
{ throw ex; }
finally
{
adp.Dispose();
cmd.Dispose();
}
}
Теперь, если исключение возникает в OpenConnection()
при попытке открыть соединение, тогда приложение падает на линии throw ex
в самом OpenConnection, в то время как я ожидал, что оно возвратит исключение.
Как я должен справиться с этой проблемой.
Более того, расширив мой вопрос во второй функции GetDataTable
, если возникает исключение, какое исключение следует выдать с теми же деталями, которые произошли в этот момент и как.
Я знаю только это, но я думаю, что это вонг.
throw new ApplicationException(ex.message,ex.innerexception)
Редактировать
Предположим, соединение с сервером прервано или я использую неверную строку соединения. Сейчас я использую функцию GetDataTable из BL. Где произойдет исключение и где я должен его обработать?
Я хочу знать проблему, которая произошла в DL. Учитывая BL не знаю код DL