Когда генерируется исключение (при отладке в среде IDE), у меня есть возможность просмотреть сведения об исключении:
 
Но в коде, если я вызываю exception.ToString(), я не вижу этих полезных деталей:
System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'FetchActiveUsers'.
  [...snip stack trace...]
Но Visual Studio имеет некоторую магию, где она может копировать исключение в буфер обмена:
 
Что дает полезные сведения:
System.Data.SqlClient.SqlException was unhandled by user code
  Message=Could not find stored procedure 'FetchActiveUsers'.
  Source=.Net SqlClient Data Provider
  ErrorCode=-2146232060
  Class=16
  LineNumber=1
  Number=2812
  Procedure=""
  Server=vader
  State=62
  StackTrace:
       [...snip stack trace...]
  InnerException:
Ну, я хочу этого!
Каким будет содержимое:
String ExceptionToString(Exception ex)
{ 
    //todo: Write useful routine
    return ex.ToString();
}
 который может совершить ту же магию. Есть ли где-то встроенная функция .NET? Есть ли у Exception секретный метод, чтобы преобразовать его в строку?
