हमारे पास Linq-to-SQL के साथ वास्तव में अजीब और असंगत व्यवहार है।लिंक-टू-एसक्यूएल और डेटटाइम अजीबता
हमारा आवेदन कुछ ग्राहकों की साइटों पर स्थापित है, और यह अधिकांश भाग के लिए ठीक काम करता है। लिंक-टू-एसक्यूएल में से एक प्रश्न एक तालिका अद्यतन करता है और DateTime
कॉलम को एक नए मान पर सेट करता है।
सभी मामलों में - - हमारे विकास और परीक्षण प्रणाली सहित इस Linq करने वाली एसक्यूएल बयान की तर्ज पर कुछ में अनुवाद किया जाता है:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = '2011-11-04 14:15:25', @ID = 555
हालांकि, एक ग्राहक की साइट पर, कारण है कि नहीं कर रहे के लिए 'टी हमें (अभी तक) के लिए स्पष्ट, इस अद्यतन में अनुवाद किया जाता है:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = 'Nov 4 2011 02:15:25PM', @ID = 555
और किसी कारण से तो SQL Server 2005 पर विफल रहता है।
अब, उस ग्राहक के सर्वर (वेब सर्वर और SQL सर्वर) में Windows Server 2008 के यूएस-अंग्रेज़ी संस्करण स्थापित हैं; SQL सर्वर में भाषा us_english
पर सेट है, दिनांक प्रारूप mdy
पर सेट किया गया है, अद्यतन करने वाले उपयोगकर्ता खाते में SQL Server में English
पर अपनी भाषा सेट है ..... और यह सेटअप वही है (उदाहरण के लिए, हमारे परीक्षण सर्वर बुनियादी ढांचे)।
तो मेरे सवाल का सच है:
क्यों पृथ्वी पर करता है Linq करने वाली एसक्यूएल अचानक ही
DateTime
की एक पूरी तरह से अलग प्रतिनिधित्व एसक्यूएल सर्वर को भेजने के लिए बनाने के? क्या इसे नियंत्रित करने के लिए कोई घुंडी है?और ADO.NET और SQL Server 2005 SP2 डेटाबेस क्यों नहीं
UPDATE
कथन सही तरीके से संभाल सकता है? - SqlDateTime अतिप्रवाह
SqlTypeException: हम अपने लॉग में ऐसी त्रुटि हो रही है। 1/1/1753 12:00:00 पूर्वाह्न और 12/31/9999 11:59:59 अपराह्न के बीच होना चाहिए।
यह एक नेट त्रुटि (एक एसक्यूएल सर्वर त्रुटि से अधिक) हो रहा है और ऐसा लगता है जैसे कि नेट वास्तव में उस Nov 4 2011 02:15:25PM
किसी कारण के लिए एक वैध DateTime
के रूप में व्याख्या नहीं कर सकते हैं। कुछ आगे की जांच पड़ताल Linq- में इंगित करता है:
अद्यतन UPDATE
खुशी से बस ठीक काम करता है ..... - जब SQL Server Management Studio में उत्पन्न अद्यतन बयान चलाने का प्रयास है, हम उस त्रुटि होने की "मजबूर" नहीं कर पा रहे टू-एसक्यूएल अलग ढंग से व्यवहार करने के तरीके SQL सर्वर 2005 या 2008.
- SQL सर्वर के साथ के खिलाफ जा रहा , हमारे दिनांकों में बदल गया हो: SQL सर्वर के साथ
Nov 4 2011 02:15:25PM
- , हमारी तिथियां बदल दी गई हैं:
2011-11-04 02:15:25PM
कृपया सी #/वीबी.नेट ऐप के लिए अपनी वर्तमान संस्कृति रिपोर्ट की जांच करें। –
@ बोगदान साहलियन: 'वर्तमान संस्कृति' सभी प्रणालियों पर 'InvariantCulture' पर सेट है –
मुझे लगता है कि यह एक .NET मुद्दा है और SQL नहीं है। शायद LINQ2SQL में एक बग कहीं भी परिवर्तनीय संस्कृति का उपयोग करने के लिए भूल जाते हैं। क्या विंडोज स्थान सेटिंग्स मेल खाते हैं? – leppie