Generating Sensible Error Messages Using
By Zack Jones
Okay, I'll admit it, if there's one area where my ASP scripts are lacking: it's in the area
of error checking. I've looked at the
Err object included with VBScript but
have been really frustrated with it's seemingly lack of information.
(For more information on the
Err object be sure to read:
Error Handling in ASP!)
Consider this snippet of code:
If you run the above script (without having a DSN named
foo created) you'll
get the following error:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
/dmsms/etest.asp, line 6
Fine, I can deal with that. While the error message is anything but pretty or profoundly descriptive, I do know that I need to fix something that's wrong on line 6 of the script. So I'll load it into the editor, fix it and then try running it again. If needed I'll repeat this cycle until I have a script that works.
Now consider a script like this one that has Error checking turned on:
Viewing the above script through your browser will produce the following output:
Error Number -> -2147467259
Error Source -> Microsoft OLE DB Provider for ODBC Drivers
Error Desc -> [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
To me this information is less useful than the default error message. At least with the
default error message I know the line on which the error originated. Recently I was having
yet another look at the
Err object and I stumbled upon something that I've
overlooked many times in the past. You can raise your own errors!
Err object contains a
Raise method that does exactly this.
Raise method has the following syntax:
The technical docs for the
Raise method can be seen
quick note: when raising a custom error, the error number should be a custom
error number plus the constant
vbObjectError, to make sure that the error number
you choose doesn't equal an already predefined error number (we'll see an example of this in
the code below).
An example of using the
Raise object to generate our own custom error (with
a more descriptive message and the line number) can be seen below:
Here's the output from this latest version. Notice that it provides the line number the error
occurred on, the page the error occurred on, and a readable and descriptive error message.
(Do understand that the reason we know the line number the error occurred on it because we
hardcoded the error number (the first parameter) in the
Raise method as
vbObjectError plus the line number where we think the error might have occurred.)
Error On line -> 7
Error Source -> etest.asp
Error Desc -> Connection Open Method Failed
I've finally found a way to trap for errors and get some useful information in the process. I'm going to go back through my current project and implment this type of error checking. If you have any other good tips for error checking please pass them along to me at firstname.lastname@example.org.
Instead of signing off with the customary 4Guys way of "Happy Programming" I'll use "Happy Programmer" - that's what I am now that I've found a way to make error handling work for me!