2009-08-29 8 views
6

हम सी # में हमारे कार्यक्रम में डेटाटाइम फ़ील्ड (SQL सर्वर से प्राप्त) के लिए शून्य कैसे प्रबंधित कर सकते हैं?हमारे कार्यक्रम में एक अनुमति-शून्य डेटाटाइम फ़ील्ड (डीबी) के लिए शून्य कैसे संभालें?

उत्तर

12

यहां 3 आम दृष्टिकोण हैं;

  • अगर आप बात कर रहे हैं के बारे में object (शायद के रूप में आप यह डेटा-रीडर से लाने), तो DBNull.Value बातिल का प्रतिनिधित्व कर सकते हैं। मैं इसे डेटा-लेयर से बाहर नहीं जाने देता, हालांकि
  • .NET 1.1 इतिहास, DateTime.MinValue के कारण आमतौर पर null के रूप में व्याख्या किया जाता है; एक जादू संख्या, हो सकता है - लेकिन यह अधिकांश डेटा-बाध्यकारी आदि द्वारा काम करता है और समर्थित है
  • .NET 2.0, Nullable<T> में इसका अर्थ है कि आप DateTime? का उपयोग कर सकते हैं - यानी एक शून्य-दिनांक-दिनांक; बस DateTime? का उपयोग करें जहां कभी भी आपका मतलब DateTime है जो शून्य हो सकता है, और आप इसे null या वैध DateTime का मान दे सकते हैं।

डेटा का उपयोग और nulls पर कुछ अन्य विचार:

  • जब एक SqlCommand आप चाहिए उपयोग DBNull.Value को गुजर, null नहीं - नीचे
  • देखने के लिए जब एक डेटा रीडर से पढ़ने, मैं reader.IsDbNull(ordinal)

कमांड सामान (उदाहरण के साथ Nullable<T> के साथ)):

param.Value = when.HasValue ? (object)when.Value : DBNull.Value; 
+0

मार्क, बहुत बहुत धन्यवाद। – odiseh

3

उपयोग DateTime?

क्या समस्या आप कर रहे हैं, विशेष रूप से?

- संपादित करें

जैसा कि यह स्पष्ट है, कि एक Nullable दिनांक समय वस्तु, सवाल नहीं :)

DateTime? t = null; 

है - संपादित करें

टिप्पणी के जवाब में इतना है कि यह जाँच करें:

DateTime? theTime; 

if(table["TheColumn"] == DBNull.Value){ 
    theTime = null; 
} else { 
    theTime = (DateTime) table["TheColumn"]; 
} 
+0

मैं ऑब्जेक्ट (डेटारो का एक कॉलम) डेटटाइम पर नहीं डाल सकता। – odiseh

+0

संपादन के माध्यम से जवाब दिया। आपको बस यह जांचना होगा कि यह 'DBNull.Value' के बराबर है या नहीं। –

+0

ओह यह पाया धन्यवाद। – odiseh

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