2010-02-03 13 views
49

.NET डेटटाइम (जब डिफ़ॉल्ट (डेटटाइम) होता है) को SQLDateTime में कनवर्ट करते समय मुझे हमेशा यह जांचना चाहिए कि .NET दिनांक SqlDateTime के बीच है। MinValue और SqlDateTime.MaxValue [या] क्या कोई अच्छा तरीका है यह करने के लिए।.NET डेटटाइम SqlDateTime रूपांतरण

+50

@JohnSaunders: हाँ, कि थोड़े picky है। – Will

उत्तर

90

क्या यह संभव है कि तिथि वास्तव में उस सीमा से बाहर हो सकती है? क्या यह उपयोगकर्ता इनपुट से आता है? यदि इनमें से किसी भी प्रश्न का उत्तर हाँ है, तो आपको हमेशा जांच करनी चाहिए - अन्यथा आप अपना आवेदन त्रुटि से प्रवण कर रहे हैं।

आप बल्कि आसानी से एक SQL विवरण में शामिल करने के लिए अपनी तिथि फ़ॉर्मेट कर सकते हैं:

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss"); 
+0

@ विंस्टन: हाँ मेरी आने वाली तारीख कभी-कभी शून्य हो सकती है। – Sreedhar

+15

@ विंस्टन: आपको * एसक्यूएल कथन में शामिल करने के लिए अपनी तिथि को स्ट्रिंग के रूप में प्रारूपित नहीं करना चाहिए। इसके बजाय पैरामीटरयुक्त एसक्यूएल का उपयोग दृढ़ता से टाइप किए गए पैरामीटर के साथ करें। – LukeH

+5

मैं ल्यूक से सहमत हूं। क्या होगा यदि आप "ड्रॉप" महीने में "टेबल" के "उपयोगकर्ताओं" पर पैदा हुए थे? (गंभीरता से, ल्यूक क्या कहता है) –

2

आप DBNull के लिए जाँच कर रहे हैं, एक .NET दिनांक समय के लिए एक एसक्यूएल Datetime परिवर्तित करने में कोई समस्या नहीं होनी चाहिए। हालांकि, आप एक .NET डेटटाइम को एक मान्य SQL दिनांक समय में परिवर्तित करने में समस्याएं चला सकते हैं।

SQL सर्वर 1/1/1753 से पहले तिथियों को पहचान नहीं करता है। इंग्लैंड ने ग्रेगोरियन कैलेंडर को अपनाया था। आम तौर पर डेटटाइम की जांच .MinValue पर्याप्त है, लेकिन अगर आपको संदेह है कि डेटा 18 वीं शताब्दी से कई साल पहले हो सकता है, तो आपको एक और चेक बनाने या एक अलग डेटा प्रकार का उपयोग करने की आवश्यकता है। (मुझे अक्सर आश्चर्य होता है कि संग्रहालय अपने डेटाबेस में क्या उपयोग करते हैं)

अधिकतम तिथि की जांच करना वास्तव में आवश्यक नहीं है, SQL सर्वर और .NET दिनांक समय दोनों की अधिकतम तिथि 12/31/9999 है यह एक वैध व्यापार नियम हो सकता है लेकिन यह एक समस्या का कारण नहीं होगा।

1
entitie के साथ ऐसा करना मेरी खोज पर

, मैं यहाँ पर ठोकर खाई, बस मैं क्या बाहर मिल गया है पोस्ट करने के लिए वापस मार ...

जब EF4 का उपयोग कर, "एक एसक्यूएल के" datetime स्तंभ से भरा जा सकता है बिटकॉन्टर का उपयोग कर .NET की डेटटाइम।

EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary()); 

भी फ़करुडेन के लिंक ने मुझे आगे लाया ... धन्यवाद।

0

केवल तारीख हिस्सा तुलना -To, आप कर सकते हैं:

var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");