Spanky
Spanky

Reputation: 5000

Outputting the exception from a SQLException error

I have a .aspx page calling a .asmx page's web service. In that .net web service I attempt to open a database connection to SQLServer 2008. The connection is failing. I am not sure why. I am doing this in a try / catch and the catch does get hit when I debug. I'm not sure what I can output there though as I don't have access to the server's filesystem to write a log file.

I found this posting:

try
{
   SqlCommand cmd =
       new SqlCommand("raiserror('Manual SQL exception', 16, 1)",DBConn);
   cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
   string msg = ex.Message; // msg = "Manual SQL exception"
}

here and it might do the trick for me, but I don't know how to make the msg string output to the page which called this web service? Is there a way to propagate it up the exception chain by having the calling page also implement that same exception handler?

Thanks // :)

Upvotes: 2

Views: 3005

Answers (5)

Mark Cooper
Mark Cooper

Reputation: 6894

Your should be able to trap the SQL Exception as a specifc type and read the particular error message:

try{
   ...
}
catch(SQLException sqlex)
{
   /// do some work here with sqlex.Message
}
catch(Exception ex)
{
   /// this will trap any other 'type' of exception incase a sqlex is not thrown.
}

You could then throw this "up the stack" which means sending it back to the method which called the failing code:

catch(SQLException sqlex)
    {
       throw sqlex;
    }

Or you could throw a new message based on the sql exception:

catch (SQLException sqlex)
  {
    throw new Exception("My method threw an exception in SQL:" + sqlex.Message);
  }

All of these approaches allow you to send messages back up the stack to the client that called the SQL. This is where you should render you message.

Upvotes: 3

Mark Cooper
Mark Cooper

Reputation: 6894

If you can access the debugger, you can also do a

Debug.WriteLine(ex.Message) 

in your catch statement.

This will write the error to the Output window.

Upvotes: 1

Ganesh R.
Ganesh R.

Reputation: 4385

Since you said you can debug, (Assuming you can change the code) why not do a:

string strEx = Ex.ToString(); //Ex is the caught exception.

Then just copy the strEx data from the Visual Studio IDE watch window/Visualizer & then use the data.

Upvotes: 0

Gonzalo
Gonzalo

Reputation: 21175

You can enable tracing for your page or application and then do:

Trace.Write ("This is my exception:\n" + exception.ToString ());

Then go to http://yourhost/Trace.axd and you will be able to see the output.

Upvotes: 1

Chris Fulstow
Chris Fulstow

Reputation: 41902

If you set the following in web.config then the exception details will be shown in the browser.

<customErrors mode="off" />

Or you could try installing ELMAH, it's very easy to set up, and can be configured to keep a log of exception details in memory.

Upvotes: 1

Related Questions