проблема с исключениями
От: Casy  
Дата: 01.09.05 04:24
Оценка:
Вот пример следующего кода:

            try
            {
                arParam[0] = new SqlParameter("@CdID", SqlDbType.Int, 4);
                arParam[0].Value = cdID;
                reader = SqlHelper.ExecuteReader(Util.Config.ConnectionString, CommandType.Text, sqlCmd, arParam);
                if(reader.Read())
                {
                    .
                    .
                    .
                }
                else
                {
                    throw new NullResException();
                }
            }
            catch(Exception ex)
            {
                throw new DALException(ex);
            }


проблема в том, что после генерации исключения NullResException его тут же обрабатвает блок catch. а мне этого не надо. уточнить тип исключения в catch'е возможности нет. решил проблему вот таким образом:

            try
            {
                arParam[0] = new SqlParameter("@CdID", SqlDbType.Int, 4);
                arParam[0].Value = cdID;
                reader = SqlHelper.ExecuteReader(Util.Config.ConnectionString, CommandType.Text, sqlCmd, arParam);
                if(reader.Read())
                {
                    .
                    .
                    .
                }
                else
                {
                    throw new NullResException();
                }
            }
            catch(Exception ex)
            {
                if(ex is NullResException)
                {
                    throw new NullResException();
                }
                else
                {
                    throw new DALException(ex);
                }
            }


но почему-то мне кажется, что есть более элегантное решение. может кто-нибудь знает альтернативу тому, что сделал я? буду очень благодарен
Re: проблема с исключениями
От: _FRED_ Черногория
Дата: 01.09.05 04:47
Оценка:
Здравствуйте, Casy, Вы писали:

C>            try
C>            {
C>                arParam[0] = new SqlParameter("@CdID", SqlDbType.Int, 4);
C>                arParam[0].Value = cdID;
C>                reader = SqlHelper.ExecuteReader(Util.Config.ConnectionString, CommandType.Text, sqlCmd, arParam);
C>                if(reader.Read())
C>                {
C>                    .
C>                    .
C>                    .
C>                }
C>                else
C>                {
C>                    throw new NullResException();
C>                }
C>            }
            catch(NullResException)
            {
                throw;
            }
C>            catch(Exception ex)
C>            {
C>                throw new DALException(ex);
C>            }


Или так, если уж совсем "уточнить тип исключения в catch'е возможности нет". Почему это кстати, "нет"?

            bool nullRes = false;
C>            try
C>            {
C>                arParam[0] = new SqlParameter("@CdID", SqlDbType.Int, 4);
C>                arParam[0].Value = cdID;
C>                reader = SqlHelper.ExecuteReader(Util.Config.ConnectionString, CommandType.Text, sqlCmd, arParam);
C>                if(reader.Read())
C>                {
                    nullRes = true;
C>                    .
C>                    .
C>                    .
C>                }
C>            }
C>            catch(Exception ex)
C>            {
C>                throw new DALException(ex);
C>            }

            if(nullRes)
            {
                throw new NullResException();
            }


ЗЫ. Если для выделения кода использовать тэг [c#], то читать такой код станет интереснее.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: проблема с исключениями
От: Casy  
Дата: 01.09.05 05:18
Оценка:
Здравствуйте, _FRED_, Вы писали:

Спасибо большое, первый вариант меня вполне устраивает.

_FR>Или так, если уж совсем "уточнить тип исключения в catch'е возможности нет". Почему это кстати, "нет"?


просто там могут возникать много разнотипных исключений, и уточнять каждый из них очень громоздзко(по моему даже мой вариант лучше). возможность то всегда есть. главное целесообразность.

_FR>ЗЫ. Если для выделения кода использовать тэг [c#], то читать такой код станет интереснее.


и за это отдельное спасибо
Re[3]: проблема с исключениями
От: nauro Украина  
Дата: 01.09.05 05:23
Оценка:
Как по мне, то я всегда перекидываю сообщение передав внутреннее
...
catch(Exception e)
{
    throw new Exception("my comment",e);
}
...


, а в одном месте программы перехватываю все исключения и там уже смотрю кто оно, и кто послал, и соответсвенно делаю выводы: в лог, тлт сразу на почту, или в баг трекер (еще этот же выбор, в зависимости от типа исключения, можно предоставить пользователю, так как это сделано в винде).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
-----------------------------------------
тут может быть ваша реклама
проблема с исключениями
От: Аноним  
Дата: 01.09.05 06:35
Оценка:
Несколько более элегантно:

try
{
...
}
catch(NullResException ex)
{
throw(ex);
}
catch(Exception ex)
{
throw new DALException(ex);
}



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
проблема с исключениями
От: Аноним  
Дата: 01.09.05 06:47
Оценка:
try
{
//код
}
catch(NullReferenceException ex)
{
throw;//нельзя писать throw ex, так как иначе исключение будет иметь другой StackTrace
}
catch(Exception ex)
{
throw new DALException(ex);
}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.