Try Catch Timeout

I am getting a timeout error somewhere in a code block. The block has about 40 lines of code.

What is the proper way to catch the error?

try
{
//Code Block
}

   catch (Exception err)
            {
                Session["StackTrace"] = err.StackTrace;
                Session["Message"] = err.Message;
                Session["Data"] = err.Data.ToString();
                Session["Source"] = err.Source;
                Session["ErrProcName"] = "Default_Page_Load";
                Response.Redirect("~/ErrorHandling/ShowError.aspx");

                //return "Process OK";
            }
DovbermanAsked:
Who is Participating?
 
käµfm³d 👽Connect With a Mentor Commented:
Add the following to your web.config *temporarily*. It will allow you to see details of the exception:

<system.web>  <!-- locate this section -->

    <customErrors mode="Off" />
...

Open in new window

0
 
käµfm³d 👽Commented:
Do you get the timeout within Visual Studio, or only once deployed? Are you running any long-running operations anywhere?
0
 
DovbermanAuthor Commented:
The timeout occurs when deployed.  I am not sure if it occurs within Visual Studio.

Yes there are 3 long running operations within the code block. I need to find out which one is timing out.  The catch mode is not getting triggered.

I usually do not ask for my code to be reviewed.  However, I am stuck here. This is one of the 3 long operations.  Should I wrap the other 2 in a try catch block?

-------------
 try
            {
                SqlCommand cmdapdExceptions = new SqlCommand("usp_apdExceptions", conStockSelect);
                cmdapdExceptions.CommandType = System.Data.CommandType.StoredProcedure;
                cmdapdExceptions.CommandTimeout = 2400;

                // Append the Exceptions table
                for (int i = 0; i < intRow; i++)
                {
                    cmdapdExceptions.Parameters.Clear();
                    cmdapdExceptions.Parameters.Add("@SymbolID", SqlDbType.Int).Value = dblArrException[i, 0];
                    cmdapdExceptions.Parameters.Add("@Curr5DayAvg", SqlDbType.Float).Value = dblArrException[i, 1];
                    cmdapdExceptions.Parameters.Add("@Prev8DayAvg", SqlDbType.Float).Value = dblArrException[i, 2];


                    RunProcedure(cmdapdExceptions, "usp_apdExceptions");
                }  // End  for (int i = 0; i < intRow; i++)

                cmdapdExceptions.Dispose();

                // Delete from Exceptions WHERE (Curr5DayAvg - Prev8DayAvg) =0
                // OR PctChg >= 100

                strDelExceptionsSQL = "DELETE FROM Exceptions ";
                strDelExceptionsSQL += "WHERE (Curr5DayAvg - Prev8DayAvg) =0 OR (Curr5DayAvg - Prev8DayAvg)/(Prev8DayAvg) >= 1";

                SqlCommand cmdDelExceptions1 = new SqlCommand("DelExceptions", conStockSelect);
                cmdDelExceptions.CommandType = System.Data.CommandType.Text;
                cmdDelExceptions.CommandText = strDelExceptionsSQL;
                cmdDelExceptions.CommandTimeout = 2400;
                RunProcedure(cmdDelExceptions, "DelExceptions1");
                cmdDelExceptions.Dispose();

                // Execute query to update the PctChg

                string strUpdPctChgSQL = "UPDATE Exceptions ";
                strUpdPctChgSQL += "SET PctChg = 100 * (Curr5DayAvg - Prev8DayAvg)/(Prev8DayAvg) ";

                SqlCommand cmdUpdPctChg = new SqlCommand("UpdPctChg", conStockSelect);
                cmdUpdPctChg.CommandType = System.Data.CommandType.Text;
                cmdUpdPctChg.CommandText = strUpdPctChgSQL;
                cmdUpdPctChg.CommandTimeout = 2400;
                RunProcedure(cmdUpdPctChg, "UpdPctChg");
                cmdUpdPctChg.Dispose();

                // Get the MAX(PctChg)
                string strMaxPctChgSQL = "SELECT MAX(PctChg) As MaxPctChg FROM Exceptions";
                string strMaxPctChg = GetColValue(conStockSelect, strMaxPctChgSQL, "MaxPctChg", "String");
                double dblMaxPctChg = double.Parse(strMaxPctChg);

                // Get the ExceptionCount
                string strExceptionCountSQL = "SELECT Count(*) As ExceptionCount FROM Exceptions";
                string strExceptionCount = GetColValue(conStockSelect, strExceptionCountSQL, "ExceptionCount", "String");
                int intExceptionCount = int.Parse(strExceptionCount);

                if (conStockSelect.State == ConnectionState.Open)
                {
                    conStockSelect.Close();
                }

               
                // Update SiteURL and refDate
                //Fix
                string strUpdExceptionsSQL = "UPDATE Exceptions SET SiteURL = '" + ResearchSiteURL + "', refDate = '" + dteSampleABStart.ToShortDateString() + "'  ";
                SqlCommand cmdUpdExceptions = new SqlCommand("UpdExceptions", conStockSelect);
                cmdUpdExceptions.CommandType = System.Data.CommandType.Text;
                cmdUpdExceptions.CommandText = strUpdExceptionsSQL;
                cmdUpdExceptions.CommandTimeout = 2400;

                cmdUpdExceptions.Connection = conStockReduce;
                if (conStockReduce.State == ConnectionState.Closed)
                {
                    conStockReduce.Open();
                }
                RunProcedure(cmdUpdExceptions, "UpdExceptions");
                cmdUpdExceptions.Dispose();

                // Stop the clock
                DateTime endDT = DateTime.Now;
                TimeSpan ts = endDT.Subtract(startDT);
                lblExceptionStatus.Text = ts.Minutes.ToString() + " : " + ts.Seconds.ToString() + ": " + intExceptionCount.ToString() + " Exceptions Built";

                if (conStockSelect.State == ConnectionState.Open)
                {
                    conStockSelect.Close();
                }
            }

            catch (Exception err)
            {
                Session["StackTrace"] = err.StackTrace;
                Session["Message"] = err.Message;
                Session["Data"] = err.Data.ToString();
                Session["Source"] = err.Source;
                Session["ErrProcName"] = "Default_Page_Load";
                Response.Redirect("~/ErrorHandling/ShowError.aspx");

                //return "Process OK";
            }

        }
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
käµfm³d 👽Commented:
Does the RunProcedure method have a try/catch?
0
 
DovbermanAuthor Commented:
This sounds like I need to wrap each RunProcedure in a try/catch.
Is that correct?
0
 
käµfm³d 👽Commented:
You said, "The catch mode is not getting triggered." I was wondering if RunProcedure had a try/catch that was handling the exception, hence you not seeing it within the method shown above.
0
 
DovbermanAuthor Commented:
I wrapped each RunProcedure.

The custom error page is not displayed.
Just this:
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Debugging is on in web.config.
0
 
DovbermanAuthor Commented:
You are right. RunProcedure has a TryCatch.

I am wondering why the custom error page does not display.

 private string RunProcedure(SqlCommand cmd, string strProcName)
        {

            try
            {
                cmd.ExecuteNonQuery();
                return "Process OK";
            }
            catch (Exception err)
            {
                Session["StackTrace"] = err.StackTrace;
                Session["Message"] = err.Message;
                Session["Data"] = err.Data.ToString();
                Session["Source"] = err.Source;
                Session["ErrProcName"] = strProcName;
                Response.Redirect("~/ErrorHandling/ShowError.aspx");

                return "Process OK";
            }
        }
0
 
DovbermanAuthor Commented:
This was already in web.config

<customErrors
        mode="Off" defaultRedirect="~/ErrorHandling/ShowError.aspx">
    </customErrors>

I may need to debug the old fashioned way by commenting out blocks of code.
0
 
DovbermanAuthor Commented:
The issue is a stored procedure that returns no rows.
0
 
DovbermanAuthor Commented:
The issue is a stored procedure that returns no rows.

Thanks for your help.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.