Simdan42 -
I can see why Craig0201 got a little testy - you used the word "catch" in your original question, so we all thought you knew all about the try..catch..finally block (I did too until I read further).
If I might suggest, rephrase future questions to be more like: "What's the best way to handle exceptions in my Oracle calls?" It's a little more open, and you'll probably get better answers that way.
Custom24 -
You're correct in that it's often better to return an error state when you think an error is somewhat expected. Unexpected errors are, well, unexpected. You should always have a try..catch block at the head of your program to catch any System.Exceptions that might have gotten through lower-level try..catch..finally blocks, so that your users aren't presented with the default .NET "your program has crashed" dialog (so unprofessional looking!)
Catching exceptions is pretty cheap (CPU wise), but throwing exceptions is very expensive, so a general idea is to catch exceptions as low in the call chain as possible, and return status variables to the caller.
Chip H.