Agreed.
You only use these constructions when needed.
It is better to avoid exceptions where possible, by doing the proper
checks before executing the statements. But there will always be
exceptions in a program that must be handled.
The problem I detect in the question of Rick, is that he is using the
word "Error trapping", instead of exception handling; an exception is
not always an error.
The problem with another way of SQL Server checking(like the registry
way provided in the reply of HKSHK) is that the registry entries are
changing when new versions of SQL Server are released; SQL 2000 version
is stored in Microsoft SQL Server\80, SQL 2005 in Microsoft SQL
Server\90, SQL 7 in Microsoft SQL Server\70, SQL 6.5 - I don't know. And
maybe the next version will use a complete other path, or even no
registry settings at all. Another problem is that you may know that it
is installed, and what version it is, but if you don't know if it is
running (or if the user has the right to connect to it) you still have
to apply a try catch block to a connection to this instance.