2012-04-02 9 views
31

मैं घोषणा करेंगे:सेट इस तरह एक खाली एक खाली स्ट्रिंग वैरिएबल दिनांक समय चर

string myString = string.Empty; 

वहाँ एक 'दिनांक समय' चर के लिए एक समान है?

अद्यतन:

समस्या मैं एसक्यूएल में एक 'StoredProcedure' के लिए एक पैरामीटर के रूप में इस 'दिनांक समय' का उपयोग करें। उदा:

DateTime? someDate = null; 
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate); 

मुझे इस कोड की एक अपवाद catched कह रहा है चलाने के 'StoredProcedure' एक '@SurgeryDate' पैरामीटर की उम्मीद। लेकिन मैंने इसे प्रदान किया। कोई विचार क्यों?

उत्तर

63

DateTime के बाद से एक मान प्रकार आप इसे करने के null असाइन नहीं कर सकते है, लेकिन वास्तव में इन मामलों के लिए (एक मूल्य के अभाव) Nullable<T> पेश किया गया था - के बजाय एक नल DateTime का उपयोग करें:

DateTime? myTime = null; 
+0

क्या यह 'शून्य' डेटटाइम प्रकार के SQL डेटाबेस कॉलम में फिट होगा एटटाइम? मैं इसके लिए नया हूं। – phadaphunk

+1

हां - यदि कॉलम शून्य मानों को सम्मिलित करने की अनुमति देता है – BrokenGlass

+0

@PhaDaPhunk अधिकांश डेटाबेस में सेटिंग होगी कि मान को शून्य पर सेट किया जा सकता है या नहीं। – Servy

5

आप उपयोग कर सकते हैं एक नामुमकिन डेटाटाइम। Datetime? someDate = null;

आप ऐसे मामलों में DateTime.Max या DateTime.Min का उपयोग कर लोगों के उदाहरण पा सकते हैं, लेकिन मुझे संदेह है कि आप ऐसा करना चाहते हैं। यह बढ़त मामलों के साथ कीड़े की ओर जाता है, कोड को पढ़ने के लिए कठिन है कि, आदि

1

एक खाली तारीख से प्रति के रूप में ऐसी कोई चीज नहीं है, आप की तरह कुछ मतलब है:

DateTime? myDateTime = null; 
20

नहीं, 2 विकल्प हैं :

DateTime date = DateTime.MinValue; 

यह काम करता है जब आप कुछ समय के हर एक्स राशि (जब से तुम हमेशा MinValue से अधिक हो जाएगा) करने की जरूरत है, लेकिन वास्तव में इस तरह के कुछ ऑपरेटरों का उपयोग कर के रूप में सूक्ष्म त्रुटियों (पैदा कर सकता है डब्ल्यू ओ पहले पता चल सके कि आप कर रहे हैं/MinValue नहीं) यदि आप परवाह नहीं कर रहे हैं उल।

और तुम Nullable उपयोग कर सकते हैं:

DateTime? date = null; 

जो अच्छा है और सबसे मुद्दों से बचा जाता है, जबकि शुरू केवल 1 या 2

यह वास्तव में आप क्या हासिल करने की कोशिश कर रहे हैं पर निर्भर करता है।

9

आप डेटटाइम वैरिएबल को '1/1/0001 00:00:00' पर सेट कर सकते हैं लेकिन वेरिएबल स्वयं शून्य नहीं हो सकता है। इस मिनीटाइम का उपयोग करने के लिए:

DateTime variableName = DateTime.MinValue; 
1

विकल्प 1: एक निरर्थक दिनांक समय का उपयोग करें?

विकल्प 2: उपयोग DateTime.MinValue

व्यक्तिगत रूप से, मैं विकल्प पसंद करते हैं 1.

3

एक string वर्णों की एक अनुक्रम है। इसलिए यह खाली string है, जो कि वर्णों का एक खाली अनुक्रम है।

लेकिन DateTime केवल एक ही मूल्य है, इसलिए इसे "खाली" DateTime के बारे में बात करने का अर्थ नहीं है।

यदि आप "नो वैल्यू" की अवधारणा का प्रतिनिधित्व करना चाहते हैं, तो इसे null के रूप में दर्शाया गया है। और यदि आप इसे मूल्य प्रकारों के साथ उपयोग करना चाहते हैं, तो आपको स्पष्ट रूप से उन्हें निरर्थक बनाने की आवश्यकता है। इसका मतलब है या तो Nullable<DateTime>, या समकक्ष DateTime? का उपयोग करना।

DateTime भी एक डिफ़ॉल्ट मान है (बस सभी मूल्य प्रकार की तरह), कि अप्रारंभीकृत क्षेत्रों के लिए निर्दिष्ट की और आप भी new DateTime() या default(DateTime) से प्राप्त कर सकते हैं। लेकिन आप शायद इसका उपयोग नहीं करना चाहते हैं, क्योंकि यह वैध दिनांक का प्रतिनिधित्व करता है: 1.1.0001 0:00:00।

5

आपके द्वारा उपयोग की जाने वाली विधि (AddWithValue) null मान को डेटाबेस नल में परिवर्तित नहीं करती है। आप DBNull.Value बजाय का उपयोग करना चाहिए: अगर यह null, या DBNull.Value अन्यथा नहीं है

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate 
); 

यह someDate मूल्य पारित करेंगे। इस मामले में डेटाबेस में सही मूल्य पारित किया जाएगा।

+0

ठीक है, मुझे यह दृष्टिकोण पसंद है लेकिन क्या आप अंतिम पंक्ति को समझा सकते हैं ..? – phadaphunk

+0

@PhaDaPhunk: यह अधिक सामान्य परिदृश्य के लिए है - आपके पास एक परिवर्तनीय 'someDate' प्रकार' Nullable 'है। यदि इसका मान 'शून्य 'है तो मैं' AddWithValue' विधि में 'DBNull.Value' पास करता हूं। अन्यथा मैं मूल्य खुद पास करता हूं। – Alex

+0

धन्यवाद मुझे नहीं पता था कि हम ऐसा कर सकते हैं! – phadaphunk

4

कोई एक:

DateTime dt = new DateTime(); 

या

DateTime dt = default(DateTime); 
1

आप

DateTime dNewDate = new DateTime(); 

लिए दिनांक मान {1/1/0001 00:00:00 पर सेट है सेट करते हैं AM}

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