title: Exception propagation in C#
body: <p>Suppose I have three functions doA(), doB(), and doC() in a C# program where I know that doA() will call doB() which in turn calls doC().  </p>
  
  <p>Since doC() has to interact with a database, I know that it could very well generate exceptions that it won't be able to resolve that need to be brought to the user's attention.  At the moment, I have the code which might throw the error in a try / catch blow in doC() and then the call to doC() in doB() in another try / catch and similarly the call to doB() in doA() in try / catch block.  This allows me to just use throw; to kick the exception up to doA() where something can reasonably be done to display this to the user.  </p>
  
  <p>This seems a little like overkill though.  I am wondering if since I don't plan on dealing with the exception in doB() or doC() if I can just get rid of the try / catch blocks there.  </p>
  
  <p>Assuming there are no finally blocks involved, what is the best practice for dealing with situations like this?  </p>