سؤال

ولقد تداخل الكتل الصيد محاولة

try
{
    // statements
    try
    {
        // statements
    }
    catch(SqlException sqlex)
    {
        Response.Redirect(@"~/Error.aspx?err=" + Server.UrlEncode(sqlex.Message)
                              + "&src=" + Server.UrlEncode(sqlex.ToString()));
    }
    catch (Exception ex)
    {
        Response.Redirect(@"~/Error.aspx?err=" + Server.UrlEncode(ex.Message)
                              + "&src=" + Server.UrlEncode(ex.ToString()));
    }
    finally
    {
        conn.Close();
    }
}
catch (Exception ex)
{
    Response.Redirect(@"~/Error.aspx?err=" + Server.UrlEncode(ex.Message)
                          + "&src=" + Server.UrlEncode(ex.StackTrace)); 
}
finally
{
    conn.Close();
}

وإذا تم القبض على SqlExeception في داخل الكتلة الأولى الصيد، ثم أيضا لمحاولة ... الصيد يحيط Response.Redirect، تم اكتشاف ThreadAbortException الناتجة عن التحويل عن طريق كتلة التقاط الخارجي.

وكيف يمكنني حل هذه المشكلة؟ شكرا!

هل كانت مفيدة؟

المحلول

هذه المقالة

وماذا يمكنك أن تفعل أكثر ببساطة لا إعادة توجيه داخل بك حاول / يسخر الصيد:

string url ;
try 
     { 
            // statements 
            try 
            { 
            } 
            catch(SqlException sqlex) 
            { 
               url = @"~/Error.aspx?err=" + Server.UrlEncode(sqlex.Message) + "&src=" + Server.UrlEncode(sqlex.ToString()); 
            } 
            catch (Exception ex) 
            { 
                url = @"~/Error.aspx?err=" + Server.UrlEncode(ex.Message) + "&src=" + Server.UrlEncode(ex.ToString()); 
            } 
            finally 
            { 
                conn.Close(); 
            } 
    } 
    catch (Exception ex) 
        { 
            url = @"~/Error.aspx?err=" + Server.UrlEncode(ex.Message) + "&src=" + Server.UrlEncode(ex.StackTrace);  
        } 
        finally 
        { 
            conn.Close(); 
        } 
} 

if ( url != "" ) {
    Response.Redirect(url);
}
else {
    // Page logic can continue
}

نصائح أخرى

والنظر في تغيير التعليمات البرمجية في أول رد فعل

if ( url != "" ) { Response.Redirect(url);}

إلى

if (!string.IsNullOrEmpty(url)) { Response.Redirect(url);}

استخدم متغير لتعقب عندما تم طرح خطأ في محاولة الداخلي ... الصيد ومن ثم التحقق من ذلك في الشوط الثاني عن طريق المحيطة Response.Redirect مع بيان إذا.

وكلما كنت تستخدم Response.Redirect داخل كتلة حاول اللحاق، يجب عليك إضافة المعلمة الثانية.

وبدلا من هذا:

Response.Redirect("somepage.aspx");

هل هذا:

Response.Redirect("somepage.aspx", false);

عند هذا منطقي صحيح، يتم إرسال محتويات صفحة إلى صفحة جديدة (بحيث يمكنك استخدام القيم النموذج). عندما يكون منطقية غير صحيح، لا يتم إرسال محتويات الصفحة. وربما هذا هو ما تريد. وكنت أعرف إذا كنت في حاجة حقيقية.

وثمة نهج آخر لهذا هو للقبض على ThreadAbortException فيها في كتلة اقبض فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top