2010-04-13 8 views
7

मैं कुछ डेटा एक्सेस कोड लिख रहा हूं और मैं डेटाबेस में संभावित "अमान्य" डेटा राज्यों की जांच करना चाहता हूं। उदाहरण के लिए, मैं डेटाबेस से बाहर एक विजेट लौट रहा हूं और मैं केवल एक की उम्मीद करता हूं। अगर मुझे दो मिलते हैं, तो मैं अपवाद फेंकना चाहता हूं। भले ही रेफरेंसियल अखंडता को इसे होने से रोका जाना चाहिए, मैं डीबीए पर स्कीमा को कभी भी नहीं बदलना चाहता हूं (इसे स्पष्ट करने के लिए, यदि प्राथमिक कुंजी बाधा हटा दी जाती है और मुझे डुप्ली मिलती है, तो मैं जल्दी और स्पष्ट रूप से तोड़ना चाहता हूं)।अमान्य डेटाबेस स्थिति के लिए फेंकने के लिए कौन सा .NET अपवाद?

मैं System.IO.InvalidDataException का उपयोग करना चाहता हूं, सिवाय इसके कि मैं एक फ़ाइल स्ट्रीम से निपट नहीं रहा हूं, इसलिए यह भ्रामक होगा। मैं एक सामान्य अनुप्रयोग अपवाद के साथ जा रहा समाप्त हो गया। किसी के पास एक बेहतर विचार है?

उत्तर

15

InvalidDataException सुंदर करने के लिए उचित लगता है मैं:

  • नाम बिल्कुल फिट बैठता है
  • वर्णन बहुत यथोचित फिट बैठता है जब आप समझते हैं कि यह प्रभावी डेटाबेस
  • विवरण में
  • कुछ भी नहीं है फ़ाइलों का उल्लेख से एक डेटा "धारा" है, तो मैं चीजों की उस तरफ के बारे में चिंतित नहीं होगा

आप एक स्टोर से डेटा को प्रभावी ढंग से deserializing कर रहे हैं। यह एक आरडीबीएमएस होता है, लेकिन यह अपेक्षाकृत महत्वहीन है। डेटा अमान्य है, इसलिए InvalidDataException अच्छी तरह फिट बैठता है।

इसे एक और तरीका रखने के लिए - यदि आप फ़ाइल से डेटा लोड कर रहे थे, तो आप InvalidDataException का उपयोग करेंगे? मान लीजिए कि अपवाद के मामले में, यह क्यों मायने रखता है कि डेटा कहां से आ रहा है?

+0

हां, मैं इसे फ़ाइल से डेटा लोड करने के लिए उपयोग करूंगा - मैं आपके तर्क से सहमत हूं। मैं आगे बढ़ूंगा और अमान्यडेटाएक्सप्शन का उपयोग करूंगा। – jslatts

+2

यह शायद वास्तव में सबसे उपयुक्त मौजूदा अपवाद वर्ग है। यह सिर्फ अजीब IMHO लगता है - @ जोन स्कीट के डेटा स्ट्रीम तर्क के बावजूद - 'System.IO' नेमस्पेस से अपवाद फेंकने के लिए जब आप' System.Data' से संबंधित चीजें करते हैं। (बेशक, नामस्थानों का ठोस अर्थ अतिसंवेदनशील नहीं होना चाहिए, लेकिन यह अभी भी एक सूक्ष्म संदेश को व्यक्त करता है कि यह * फेंकने के लिए सही चीज़ नहीं हो सकता है।) मुझे लगता है कि इस मामले में, एक कस्टम अपवाद वर्ग प्रदान करना होगा न्यायसंगत होना – stakx

+0

गैर-फ्रेमवर्क कोड से मूल रूपरेखा अपवादों को फेंकने के खिलाफ व्यक्तिगत रूप से Im समर्थन कारणों को सही तरीके से निर्देशित नहीं किया जा सकता है। शायद ApplicationInvalidDataException नामक एक सबक्लास उचित होगा? –

0

आप एक कस्टम अपवाद लिख सकता है अगर आप किसी भी उपयुक्त मानक अपवाद नहीं मिल रहा है ...

लेकिन, आप कहते हैं:

हालांकि रेफेरेंन्शिअल सत्यनिष्ठा होने से रोकने चाहिए, मैं डीबीए पर निर्भर नहीं करना चाहते हैं स्कीमा कभी नहीं बदलना।

कोई डीबी स्कीमा बदल दे, परिवर्तन बहुत बड़ी है कि आप अपने आवेदन/डेटा एक्सेस कोड के लिए कुछ संशोधन करने के लिए होगा रहे हैं ...

+2

एर, मैंने कहा कि गलत है। मैं सिर्फ त्रुटि को जल्दी से सतह पर देखना चाहता हूं कि स्कीमा मेरे नीचे से बदल दी गई है। मुझे पता है कि मैं एक कस्टम अपवाद बना सकता हूं, लेकिन मैं यह सुनिश्चित करना चाहता था कि मैं एक अच्छा डिफ़ॉल्ट नहीं खो रहा था। – jslatts

6

आप एक अपवाद की जरूरत है कि होगा जिस स्थिति से आप काम कर रहे हैं उसका बिल्कुल वर्णन करें, अपना अपवाद क्यों न करें?

बस इसे सिस्टम से प्राप्त करें। अपवाद। बस आगे बढ़ो और अपने खुद के बनाने के लिए,

InvalidConstraintException
NotSupportedException
OverflowException

या::

+0

मैं केवल ब्रैड अब्राम की सलाह का पालन करने की कोशिश कर रहा था और यह सुनिश्चित करना चाहता था कि मुझे उपयुक्त अपवाद में कोई अनुपस्थित नहीं लगे: http://blogs.msdn.com/brada/archive/2005/03/27/402801.aspx – jslatts

+0

+1 अपनी खुद की अपवाद बनाना मेरी सलाह भी होगी - यह त्रुटियों को ट्रैक करते समय आपका मित्र है। इससे भी ज्यादा जब आपके आवेदन या व्यापार तर्क से बंधे सीमाओं और बाधाओं की बात आती है। – Filburt

1

मैं निम्न में से एक का उपयोग करने के लिए परीक्षा हो सकती है TooManyRowsException

+1

यह ध्वनि की तरह लगता है कि यह अमान्य है - उल्लंघनित कॉन्स्ट्रेनट अपवाद या अवरोध उल्लंघन उल्लंघन? –

+0

@ जोन: एक तरह से यह एक बाधा है जिसका उल्लंघन किया गया है। अपने मामले में बाधा मौजूद है, वह बस इसे छोड़ने वाले डेटाबेस लड़के से डरता है। – NotMe

संबंधित मुद्दे