try catch just does not work

M

Michael C

I'm writing an app on the PDA using C# with .net 1.1. It is all working well
except in some cases a try catch is simply ignored and a totally different
error is returned. I've got code like below to execute a command. I'm
simulating loss of connection by stopping sqlserver during a transaction.
The problem is I cannot trap the error and I get a stack overflow exception
way up the stack at a Form.ShowDialog(). I've done a break on
executenonquery below and then pushed F11 and the catches both get ignored
and execution jumps up the stack without any code running at all.

I know this is a bit of an obsure problem but I appreciate any input. I
couldn't find anything on google.
Regards,
Michael

try
{
_Command.ExecuteNonQuery();
}
catch(SqlException ex)
{
throw new Exception(ex.Message);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
 
G

Guest

This may not answer your problem directly, but what is the purpose of your
try/catch statement? What is happening (if it did work) is that your
catching an exception, creating a new instace of the exception and throwing
it. This will erase your stack trace which will track down the root of where
the orginal exception gets thrown. If all you need to do is bubble it up to
the calling method, take out the try/catch all together, that way you
preserve the stack trace in your exception.

Or if you want to personalize your error messages you can do something like
this:

try
{
_Command.ExecuteNonQuery();
}
catch(SqlException ex)
{
string errMsg = "SQL Error received: " + ex.Message
throw new SqlException(errMsg, ex); //passing an inner exception
parameter preserves your stack trace in the exception.
}
catch(Exception ex)
{
string errMsg = "Unexpected error occured while executing non query:
" +
ex.Message
throw new Exception(errMsg, ex);
}

Personally, I would leave out the try/catch statement.
 
S

sloan

If you research "Brad Abrams" and try catch finally, you'll find a blog.

Basically, a good rule of thumb is that you should have alot more
try/finally
statements

instead of
try/catch
or
try/catch/finally
statements.

try
{
//do something
}
finally
{
//close up resources like IDataReader for instance
}


Then somewhere, maybe the presentation layer....... you have the catch
statement.

Its actually wasted effort to catch and an an exception, and then rethrow
it.

...

The previous poster is also correct. You don't throw a new Exception.
Well, perhaps you want a specific user friendly message to display. Then
you ~should use the inner exception mechanism the other poster talks about.

If you did this:

try
{
}
catch(Exception ex)
{
throw ex;
}

that would be closer to what you want I think.... However, you need to look
at the first part of my post, which talks about only a try/finally

....................................
 
M

Michael C

sloan said:
Its actually wasted effort to catch and an an exception, and then rethrow
it.

That's true but this is only sample code. This statement had no try catch at
all and the catch was higher up in the call stack. I added these catches
just as a test giving me somewhere to add a breakpoint while keeping the
catch statements higher up working. I thought having the catch directly
around the statement and throwing it again might eliminate the problem but
unfortunately it didn't.

Michael
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top