2009-12-12 3 views
2

У меня есть страница .aspx, вызывающая веб-службу страницы .asmx. В этой веб-службе .net я пытаюсь открыть соединение с базой данных с SQLServer 2008. Соединение не работает. Я не знаю, почему. Я делаю это в try/catch, и уловка попадает, когда я отлаживаю. Я не уверен, что я могу выводить там, хотя у меня нет доступа к файловой системе сервера для записи файла журнала.Вывод исключения из ошибки SQLException

Я нашел объявление:

try 
{ 
    SqlCommand cmd = 
     new SqlCommand("raiserror('Manual SQL exception', 16, 1)",DBConn); 
    cmd.ExecuteNonQuery(); 
} 
catch (SqlException ex) 
{ 
    string msg = ex.Message; // msg = "Manual SQL exception" 
} 

здесь, и это может сделать трюк для меня, но я не знаю, как сделать Сообщ вывод строки на страницу, которая называется этот веб-сервис? Есть ли способ распространить его на цепочку исключений, если вызывающая страница также реализует этот же обработчик исключений?

Благодаря // :)

+0

Спасибо за редактирование Марк, это помогло :) – Spanky

ответ

3

Вы должны быть в состоянии ловушки SQL Exception, как, специфический тип и читать конкретное сообщение об ошибке:

try{ 
    ... 
} 
catch(SQLException sqlex) 
{ 
    /// do some work here with sqlex.Message 
} 
catch(Exception ex) 
{ 
    /// this will trap any other 'type' of exception incase a sqlex is not thrown. 
} 

Вы могли бы бросить это «вверх стек», который означает отправку его обратно к методу, который называется ошибочный код:

catch(SQLException sqlex) 
    { 
     throw sqlex; 
    } 

Или вы могли бы бросить новое сообщение на основе SQL исключения:

catch (SQLException sqlex) 
    { 
    throw new Exception("My method threw an exception in SQL:" + sqlex.Message); 
    } 

Все эти подходы позволяют отправлять сообщения обратно в стек для клиента, который вызывает SQL. Здесь вы должны отобразить сообщение.

+0

Вот что я был после, потрясающий!Спасибо // :) – Spanky

1

Если вы установите следующее в web.config то деталь исключения будет показана в браузере.

<customErrors mode="off" /> 

Или вы могли бы попробовать установки ELMAH, это очень легко настроить, и может быть настроен, чтобы сохранить журнал детали исключения в памяти.

+0

Хорошо, я проверю, чтобы увидеть состояние этого. Спасибо // :) – Spanky

1

Вы можете включить трассировку для страницы или приложения, а затем сделать:

Trace.Write ("This is my exception:\n" + exception.ToString()); 

Затем перейдите к http://yourhost/Trace.axd и вы сможете увидеть результат.

+0

Прохладный, спасибо // :) – Spanky

0

Так как вы сказали, что вы можете отлаживать, (Предполагая, что вы можете изменить код), почему бы не сделать:

string strEx = Ex.ToString(); //Ex is the caught exception. 

Затем просто скопировать данные STREX из окна IDE часов Visual Studio/визуализатор & затем использовать данные.

1

Если вы можете получить доступ к отладчику, вы можете также сделать

Debug.WriteLine(ex.Message) 

в своем заявлении уловов.

Это приведет к появлению ошибки в окне «Выход».

+0

Ницца, я попробую. Благодаря // :) – Spanky