I consider it my best practice to handle exceptions at the last crucial moment. This usually means the UI level (i.e., the Controller in an MVC application or in code in a traditional asp.net application). At this high level, your code “knows” what the user is asking, and what to do if something doesn’t work.
The exception handling below in the call stack usually results in the call code not being able to handle the exception correctly.
At your data level, you should use standard templates (e.g. using statement for IDisposables such as SqlConnection) that you know might happen (don't do this due to out of memory or other rare cases) and then let them flow the call stack when they do it. In most cases, you might want to catch these exceptions and wrap them in one type of exception, in situations where MANY exceptions can be handled by callers.
If you need to “clear” the material before allowing exceptions, you can always use finally block to clear. You do not need to catch using the finally block.
I do not know any examples of small sites that are designed to highlight the proper handling of exceptions, sorry.
Will
source share