Microsoft - Manejo de errores - Tratamiento de secciones

Para el tratamiento de errores se usa Exception, este permite manejar los errores macro, los más comunes son:
Tipo
Error
Numérico 
- Matemático
BDD
- SQL
Archivo
- I/O

En caso de que no se especifique el tipo de error trata cualquier tipo de error, en caso de que si se especifique uno y se genere otro tipo de error se cae la aplicación.

            try
            {
                //...
            }
            catch (Exception)
            {
                //...
            }
            finally
            {
                //...
            }

Ambos, (try y catch) siempre van juntos, mientras que finally siempre se ejecutará sea que haya o no error.

Un try puede tener varios tipos de catch. x Ej.
            try
            {
                //...
            }
            catch (IOException)
            {
                //...
            }
            catch (SQLException)
            {
                //...
            }
            catch (Exception)
            {
                //...
            }
Los errores van desde el específico a lo general. Por ejemplo el IOException es hijo del Exception por lo que si primero le pongo al Exception no entrará al IOException. No serviría de nada.

Para capturar el error se lo trata de la siguiente manera:
Luego del catch se agrega una variable como sigue:
            catch (Exception e)
            {
                MessageBox.Show(e);
            }

Cuando se dan los errres en las diferentes capas el error tratado se lo debe propagar, es decir enviar a la capa que lo llamó.


En caso de que el error se de en la capa de negocios, el error se puede tratar de la siguiente manera:
try
        { //////
            lstArchivos.Items.Clear();
            foreach (FileInfo fi in dir.GetFiles())
                lstArchivos.Items.Add(fi.Name);
        }
        catch (Exception ex)
        {
            MessageBox.Show("No hay archivos en la carpeta seleccionada.");
            throw ex;
        }

No es bueno arrojar muchos Throws entre capas al usuario:
En un inicio las al pasar el error entre capas se perdía el detalle de los errores en VS2003 y VS2005.
Cuando se hace una llamada se envían a la pila de llamadas, por lo que se sobrecarga la memoria.

Si da error en la capa de datos es porque se llamó desde el negocio, y esta fue llamado en UI, Por efecto dominó se cae el método en datos luego en el negocio y luego en la UI, por lo tanto se recomienda agregar un try catch en la de datos (se tienen los errores reales de la BD).
Analizar en qué capas colocar los try catch y throw, según el número de capas.
Deber: Implementar try catch en cada método aplicado hasta ahora.

Método String.Format - (String, Object[])



// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample 
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main() 
    {
// Store the output of the String.Format method in a string.
    string s = "";

    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    s = String.Format(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f); 
    Console.WriteLine(s);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    s = String.Format(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal sortable: . . . {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n", 
        thisDate);
    Console.WriteLine(s);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    s = String.Format(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n", 
        Color.Green);       
    Console.WriteLine(s);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/
Fuente: