C# les meilleures pratiques de gestion d'erreur et de passer des messages d'erreur

Je suis en utilisant asp.net et je suis toujours à la lutte pour une belle façon de gérer les erreurs et si il y a de tout, pour passer le errormessage à l'utilisateur. Pour exemple, j'ai une classe Utilisateur, UserManager classe et une classe de Base de données. Imagina je veux montrer à tous les utilisateurs, un spectacle que j'ai appeler la méthode GetAllUsers de UserManagerwhich retourne une liste d'objets Utilisateur. Cette méthode crée un objet de Base de données et les appels de la méthode ExecuteQuery(string query).

EDIT:
Et maintenant, mon problème, imaginer quelque chose va mal dans le ExecuteQuery (), méthode (impossible d'ouvrir la base de données). Je tiens à informer l'utilisateur de quelque chose s'est mal passé lors de l'ouverture de la connexion de base de données. Comment dois-je faire et gérer cela d'une façon soignée?

EDIT 2:

Voulez-vous faire quelque chose comme cela? Ou autrement?

public class Database()
{
   private string _Error;

   //property error (only get)

   private void Open()
   {
     try
     {
       //Open DB
       //Fails because of error          
     }
     catch(Exception ex)
     {
       _Error = ex.Message;
     }
   }

   public DataSet ExecuteQuery(string query)
   {
      try
      {
        Open();

        //Execute query

        //return dataset
       }
       catch(Exception ex)
       {
          _Error = ex.Message;
          return null;
       }
   }
}

public class UserManager ()
{
   private string _Error;

   //Get property for Error       

   public List<User> GetAllUsers ()
   {
      Database db = new Database()

      Dataset DS = db.ExecuteQuery("my query goes here");

      (if DS == null)
      {
        _Error = db.Error;
        return null;
      }

   }
}

Dans l'interface utilisateur sur un événement click:

protected void onClick_event(args)
{

  Usermanager userman = new UserManager();
  List<User> users = userman.GetAllUsers();

  if(users == null)
  {
    //make a error panel visible
    pnlError.Visible = true;
    lblError.Text = userman.Error
  }
}

Est-ce une bonne approche?

OMI, vous ne devez attraper les exceptions spécifiques, pas de Système.Exception à la règle. Seul hic, les exceptions que vous connaissez peut se produire et que vous ne pouvez pas l'empêcher. Tout ce que vous devez juste laisser la bulle.
J'ai édité ma réponse ci-dessous avec quelques liens pour vous de regarder.
Que voulez-vous dire avec "bubble up"? Et comment faire pour le mettre en œuvre?

OriginalL'auteur Martijn | 2009-09-19