2012-02-14 15 views
39

मैं कोशिश पकड़ कोड का एक टुकड़ा है है निर्धारित करने के लिए इसे सेट अप करें ताकि डेटाबेस डुप्लीकेट के लिए जांच सके और डुप्लिकेट होने पर त्रुटि लौटाता है। वर्तमान में, जैसा कि आप देख सकते हैं, मैं मॉडल में एक ही त्रुटि जोड़ रहा हूं इससे कोई फर्क नहीं पड़ता कि क्या त्रुटि हुई। मैं इसे बदलना चाहता हूं इसलिए यह त्रुटि केवल मॉडल में जोड़ दी गई है यदि यह डीबीए द्वारा स्थापित डुप्लिकेट त्रुटि के कारण हुई थी।कैसे करता है, तो एक अपवाद एक विशेष प्रकार

नीचे वह त्रुटि है जिसे मैं पकड़ना चाहता हूं। ध्यान दें कि यह आंतरिक अपवाद में है। क्या कोई मुझे बता सकता है कि इसे विशेष रूप से कैसे पकड़ें?

enter image description here

+0

डेविड के देखें जवाब उपयोग कर सकते हैं प्राप्त करने के लिए करते हैं। आम तौर पर 'अपवाद' को पकड़ना सबसे अच्छा अभ्यास नहीं है। आपको जितना संभव हो उतना विशिष्ट होना चाहिए और कुछ भी जो आप उपयोगकर्ता/ढांचे तक बबल को संभाल नहीं सकते हैं। – Ryan

+1

इस जवाब की जाँच करें: http://stackoverflow.com/questions/3967140/c-sharp-entity-framework-duplicate-unique-exception –

उत्तर

75

से पहले अपने वर्तमान पकड़ निम्नलिखित जोड़ें:

catch(DbUpdateException ex) 
{ 
    if(ex.InnerException is UpdateException) 
    { 
    // do what you want with ex.InnerException... 
    } 
} 
-1

आप SQLException वर्ग पर एक नज़र ले जा सकते हैं - और अपवाद के संदेश की सामग्री के लिए जाँच अगर यह होता है क्या अब आप अपने आंतरिक अपवाद में देखते हैं .. इस तरह कुछ:

try 
{ 
    //your code here 
} 
catch (SQLException ex) 
{ 
    if (ex.Message.Contains("Cannot insert duplicate key in obj....")) 
    { 
     //your code here 
    } 
} 
+1

मुझे शक है कि SqlException सीधे फेंक दिया जाता है, लेकिन केवल एक आंतरिक अपवाद के रूप में । साथ ही, संदेश पाठ के मुकाबले तुलना करने के बजाय त्रुटि संख्या की जांच करना बेहतर होगा। –

+0

यूप, आप त्रुटि संख्या भी देख सकते हैं। टिप्पणी के लिए धन्यवाद। –

+0

आप त्रुटि संख्या के खिलाफ कैसे जांचते हैं? मुझे यह भी यकीन नहीं है कि यह संख्या क्या है क्योंकि यह वास्तव में एक विशिष्ट त्रुटि है? – AnonyMouse

8

System.Threading.ThreadAbortException को बदलें आपका अपवाद

try 
{ 
    //assume ThreadAbortException occurs here 
} 
catch (Exception ex) 
{ 
    if (ex.GetType().IsAssignableFrom(typeof(System.Threading.ThreadAbortException))) 
    { 
     //what you want to do when ThreadAbortException occurs   
    } 
    else 
    { 
     //do when other exceptions occur 
    } 
} 
0

यो मतलब

catch (Exception e){ 
    if (e.GetType() == XyzException) 
    //if (e.GetType().ToString() == "XyzException") 
    //if (e.GetType().Name == .....) 
} 
0

अपवाद के नाम आप

catch (Exception exc){ 
     if (exc.GetType().FullName == "Your_Exception") 
     { 
      // The same can be user for InnerExceptions 
      // exc.InnerException.GetType().FullName 
     } 
    } 
संबंधित मुद्दे