2009-11-21 17 views
7

मेरे पास निम्न कोड है जो डाटरो (डॉ) में कॉलम शून्य होने पर उड़ता प्रतीत होता है। डेटा पंक्ति से मूल्य को पार्स करने और शून्य जांच को संभालने का सही तरीका क्या है?यदि डेटा शून्य हो सकता है तो एक डाटरो से पढ़ने का सही तरीका क्या है

Person person = new Person() 
{ 
    FirstName = dr["FirstName"].ToString(), 
    LastName = dr["LastName"].ToString(), 
    BusinessPhoneNumber = dr["BusinessPhone"].ToString(), 

उत्तर

6

स्तंभ प्रकार स्ट्रिंग की है, लेकिन व्यर्थ है, किस बारे में की कोशिश कर रहा है:

// FirstName must allow null 
FirstName = dr["FirstName"] as string 

या

// FirstName would be empty for a NULL in the database 
FirstName = (dr["FirstName"] as string) ?? string.Empty 
+0

स्ट्रिंग डिफ़ॉल्ट रूप से "शून्य" हैं, क्योंकि वे संदर्भ प्रकार हैं। –

+1

मैं कॉलम के बारे में बात कर रहा था, स्ट्रिंग प्रकार नहीं। –

1

स्तंभ, और कहा कि अशक्त जांच करता है और डिफ़ॉल्ट अशक्त अगर शून्य, या स्तंभ मान नहीं तो रिटर्न एक सहायक कार्य करने के लिए एक डिफ़ॉल्ट मान दर्रा।

2

dr["FirstName"].ToString() कभी कभी नल पॉइंटर अपवाद फेंक होगा क्योंकि आप ToString का उपयोग करने की कोशिश कर रहे हैं एक शून्य वस्तु पर। उसके अलावा, तार, अशक्त हो सकता है तो वास्तव में, यदि आप जानते हैं कि यह एक स्ट्रिंग है, और आप कोई आपत्ति नहीं है कि यह शून्य है, यह

FirstName = (String) dr["FirstName"] 
+1

यह गलत है, शून्य सूचक अपवाद यहां नहीं होंगे। यदि कॉलम सामग्री शून्य है, तो ऑब्जेक्ट 'System.DBNull' वापस लौटा दिया गया है, और '.ToString()' एक खाली स्ट्रिंग देता है, जबकि '(स्ट्रिंग)' या 'स्ट्रिंग' रिटर्न 'शून्य' के रूप में होता है। –

1

करना सुरक्षित होगा आप वापस जाने के लिए निम्नलिखित का उपयोग कर सकते कॉलम शून्य होने पर एक खाली स्ट्रिंग।

FirstName = string.format("{0}", dr["FirstName"]) 
3

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

निम्नलिखित बताते हैं, लेकिन सभी के लिए शीर्षक से प्रश्न का उत्तर भी देंगे।

तो स्तंभ मान शून्य है, एक वस्तु System.DBNull दिया जाता है, और .ToString() कोई रिक्त स्ट्रिंग देता है, जबकि (string) या as string वापसी null

इसलिए ==null के लिए लौटाए गए आइटम को चेक करने का कोई मतलब नहीं है क्योंकि यह कभी भी true का मूल्यांकन नहीं करेगा।

  • आप परिणाम के रूप में रिक्त स्ट्रिंग स्वीकार करते हैं, अपने कोड पहले से ही इष्टतम है, DBNull मामले को संभालने के लिए कोई जरूरत नहीं।
  • यदि आप null प्राप्त करना चाहते हैं, तो .ToString() से as string पर बदलें।
  • यदि आप इसे किसी अन्य तरीके से संभालना चाहते हैं, तो if (dr.IsNull("FirstName")) का उपयोग करें या as string के बाद लक्ष्य चर पर ==null करें।
संबंधित मुद्दे

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