2011-02-25 15 views
9

मेरे पास एक टेक्स्ट फ़ाइल है जिसे मैंने डेटा तालिका में पढ़ा है और फिर SQL सर्वर तालिका में एक थोक डालने का प्रदर्शन किया है। यह काफी तेज़ है और यह बहुत अच्छा काम करता है जब सभी आयातित मानों को तारों के रूप में माना जाता है (तिथियां, तार, इन्ट्स इत्यादि सभी स्ट्रिंग फ़ील्ड में आयात किए जाते हैं)।डेटारो आइटम को शून्य पर सेट करना

अब मेरे पास अवधारणा है, मैं डेटाबेस और मेरे कोड में वास्तविक डेटाटाइप असाइन करने के लिए वापस जा रहा हूं। डेटाबेस में फ़ील्ड को निर्दिष्ट सही प्रकार हैं। मैं अब कोड पर काम कर रहा हूं।

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

row[i] = !string.IsNullOrWhiteSpace(data[i]) ? data[i] : DBNull.Value; 

मैं null का उपयोग कर, लेकिन इसके बजाय DBNull उपयोग करने के लिए मुझे बता कोई त्रुटि मिलती है की कोशिश की। जब मैं DBNull का उपयोग करता हूं, तो मुझे एक संदेश मिलता है जो मुझे बता रहा है कि स्ट्रिंग और System.DBNull के बीच कोई अंतर्निहित रूपांतरण नहीं है।

datatable में स्तंभों डेटाटाइप्स निर्दिष्ट किया है (इस मामले में, DataType = Type.GetType("System.DateTime")) और मैं इस स्तंभ

मैं इस संभाल कैसे करूँ के लिए AllowDBNull = true सेट?

धन्यवाद!

उत्तर

10

समस्या है, क्योंकि आपरेशन के प्रयोग कर रहे हैं। चूंकि DBNull.Value एक स्ट्रिंग नहीं है, इसलिए आप सशर्त ऑपरेटर का उपयोग नहीं कर सकते हैं।

या तो first_expression और second_expression के प्रकार के समान होना चाहिए, या एक अंतर्निहित रूपांतरण एक प्रकार से दूसरे मौजूद होना चाहिए: इसका कारण यह है conditional operator docs से है।

यह करके देखें:

if (!string.IsNullOrWhiteSpace(data[i])) 
    row[i] = data[i]; 
else 
    row[i] = DBNull.Value; 

इस के लिए दोनों पक्षों के समान होने की रूपांतरण आवश्यकताओं को नजरअंदाज। वैकल्पिक रूप से, आप दोनों को System.Object पर स्पष्ट रूप से डाला जा सकता है, और फिर भी सशर्त ऑपरेटर का उपयोग कर सकते हैं।

6

तुम इतनी तरह वस्तुओं के लिए उन दोनों को कास्ट करने के लिए की जरूरत है:

row[i] = !string.IsNullOrWhiteSpace(data[i]) ? (object)data[i] : (object)DBNull.Value; 
+5

आप केवल 'object' लिए उनमें से एक को कास्ट करने की जरूरत है। – SLaks

1

मैं Asp.Net MVC 5 सी # वेब अनुप्रयोग पर काम कर रहा हूँ और इस तरह से किया था और काम कर ठीक

rw[6] = (qry.PODate != null) ? qry.PODate : (object)DBNull.Value; 
संबंधित मुद्दे