2010-01-13 13 views
7

मैं निम्न कोड पंक्तिबराबर DBNull नहीं

if (DBNull.Value.Equals(o) || o != null) 

जहां oobject o in row.ItemArray मैं का एक त्रुटि प्राप्त हो रही है DBNull कैसे ->

Xml type "List of xdt:untypedAtomic" does not support a conversion from Clr type "DBNull" to Clr type "String".

मुझे नहीं पता क्या समझ में आता है कि जब मैं अपने कोड के माध्यम से कदम उठाता हूं तो यह if इसे पकड़ना और मेरी वैकल्पिक कार्रवाई करना चाहिए, लेकिन ऐसा नहीं है?

क्या कोई मेरे लिए कुछ प्रकाश डाला सकता है।

धन्यवाद!

+0

क्या आप कुछ और कोड पोस्ट कर सकते हैं? ओ कब सौंपा गया है? – hackerhasid

+1

'Console.WriteLine (o.GetType() नाम) का नतीजा क्या है;'? – jason

+2

मुझे लगता है कि यह थोड़ा अजीब है जब आप डीबीएनयूएल के साथ तुलना करते हैं और फिर शून्य – tga

उत्तर

1

ऐसी तुलना हो सकता है में मदद करता है

if (!o.GetType().Equals(DBNull.Value))

या

if (o is DBNull)

6

मुझे लगता है कि आप समस्या यह है कि वास्तव में

DBNull.Value == null 
//is always false 

DBNull के लिए मूल्यों पर तुलना की तो डीबी से लौटे एक विशेष वर्ग है यदि आपके सरणी में दोनों शामिल हैं तो आपको वास्तव में एक शून्य स्थिति और एक DBNull.value की जांच करने की आवश्यकता है।

संपादित करें: क्षमा करें आपके कोड के करीब दिखने के लिए आपको बस अपने या ऑपरेशन को उलट करने की आवश्यकता हो सकती है। यदि ओ == नल आपका पहला कथन आपके अपवाद के साथ उड़ाएगा। प्रयास करें:

if (o != null || o == DBNull.Value) 
+1

नहीं यदि ओ == शून्य ... –

+0

यह संपादन गलत है, क्योंकि इसका मतलब क्या है इसका सटीक विपरीत परीक्षण कर रहा है। @ थॉमस लेवेस्क सही ढंग से कहता है, इसके बजाय इसे 'if (o == null || o == DBNull.Value)' होना चाहिए। लेकिन पहला बयान भी एक समस्या नहीं है, लेकिन वह शैली कई कोडिंग त्रुटियों की समस्या का कारण बनती है जहां ऑब्जेक्ट शून्य होने पर अपवाद फेंक देगा। तो मूल्य के साथ कुछ और करने से पहले, हमेशा * शून्य * नल * पहले * की जांच करने के लिए यह बहुत अच्छा है। –

+1

त्रुटियां जो 'कोड को उड़ाती हैं' तब होती है जब आप 'if (o.ToString()) {...}' जैसे कुछ कोशिश करते हैं, क्योंकि तब जब ओ शून्य होता है, तो कोई * गुण * या विधि जैसे '.ToString() 'एक त्रुटि फेंक देगा। इसलिए यह सुनिश्चित करने के लिए हमेशा अच्छा अभ्यास होता है कि पहले शून्य या नल के लिए परीक्षण करना सुनिश्चित करें। हालांकि 'अगर (डीबीएनयूएल.वैल्यू.इक्वाल्स (ओ) || ओ! = नल)' ओ की किसी भी संपत्ति तक नहीं पहुंच रहा है। और यदि विधि सही ढंग से शून्य मान को संभालती है, तो ओ नल होने पर कोई बग नहीं है। लेकिन कई प्रोग्रामर शून्य के लिए परीक्षण करना भूल जाते हैं, इसलिए कई तरीकों से गुजरने से कई समस्याएं होती हैं क्योंकि ईमानदारी से, बहुत सारे कोड मैला हैं। –

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