2011-07-04 17 views
22

मैं एक मेज और तारीख-बार में यह प्रारूप में हैं:सी # से एसक्यूएल से डेटाटाइम को सही तरीके से कैसे पास किया जाए?

2011-07-01 15:17:33.357 

मैं एसी # दिनांक समय ले रहा हूँ जब मैं एक .ToString करना() वस्तु मैं प्रारूप में दिनांक समय हो रही है पर :

04/07/2011 06:06:17 

मैं सोच रहा हूँ कि कैसे मैं सही ढंग से, क्योंकि जब मैं एसक्यूएल हमारे कोड यह काम नहीं करता है कि चलाने के माध्यम से सही दिनांक समय पारित (यानी सही दिनांक समय चुनें)। मैं एसक्यूएल प्रोफाइलर का उपयोग नहीं कर सकता।

//looks to if a user has had any activity in within the last time specified 
     public bool IsUserActivitySinceSuppliedTime(int userId, DateTime since) 
     { 
      //get everything since the datetime specified [usually 5 hours as this is 
      //how long the session lasts for 
      string sql = "SELECT * FROM tbl_webLogging WHERE userid = @userid AND DateAdded > @sinceDateTime"; 

      SqlParameter sinceDateTimeParam = new SqlParameter("@sinceDateTime", SqlDbType.DateTime); 
      sinceDateTimeParam.Value = since; 

      SqlCommand command = new SqlCommand(sql); 
      command.Parameters.AddWithValue("@userid", userId); 
      command.Parameters.Add(sinceDateTimeParam); 


      using (SqlDataReader DataReader = GetDataReader(command)) 
      { 
       if (DataReader.HasRows) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 


     } 

अद्यतन *******************

मैं डेटा पर निम्नलिखित चलाने:

इस कोड है

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '2011-07-01 07:19:58.000' 

और

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '04/07/2011 07:19:58' 

एक रिटर्न 53 reco आरडीएस अन्य रिटर्न 69 रिकॉर्ड। यह कैसे हो सकता है? और जब मैं डेटटाइम (04/07/2011 07:19:58) से सी # से एसक्यूएल पास करता हूं तो कोई रिकॉर्ड बिल्कुल दिखाई नहीं देता है!

+1

आपकी तालिका में 'DateAdded' कॉलम का प्रकार क्या है? क्या यह डेटटाइम है? या किसी तरह का वर्चर? –

+0

क्या आप पुष्टि कर सकते हैं कि 'दिनांक जोड़ें' में 'डेटाटाइम' टाइप किया गया है, कुछ नहीं ['n] वर्कर (x)'? –

+0

तो सी # डेटाटाइम 0 रिकॉर्ड के साथ वापस क्यों आता है? (डीबगर कहता है कि यह '04/07/2011 07:19:58 'है) @ मारस दैटटाइप डेटाटाइम है .... – Exitos

उत्तर

19

आप पहले से ही DateTime से मूल्य के साथ एक DateTime पैरामीटर का उपयोग करके सही ढंग से किया है, तो यह पहले से ही काम करना चाहिए। ToString() के बारे में भूल जाओ - क्योंकि इसका उपयोग यहां नहीं किया जाता है।

यदि कोई अंतर है, तो यह दो वातावरण के बीच अलग-अलग परिशुद्धता के साथ करने की संभावना है; शायद एक गोल (सेकंड, शायद?) चुनें और इसका उपयोग करें। यूटीसी/स्थानीय/अज्ञात को ध्यान में रखें (डीबी की "दयालु" तिथि की कोई अवधारणा नहीं है; .NET करता है)।

मैं एक मेज और datetimes है में यह प्रारूप में हैं: 2011-07-01 15:17:33.357

ध्यान दें कि डेटाबेस में datetimes ऐसे किसी भी स्वरूप में नहीं हैं; यह सिर्फ आपकी क्वेरी-क्लाइंट है जो आपको सफेद झूठ दिखा रहा है। इसे संख्या (और यहां तक ​​कि यह एक कार्यान्वयन विवरण भी है) के रूप में संग्रहीत किया जाता है, क्योंकि मनुष्यों के पास यह अजीब प्रवृत्ति है कि यह नहीं पता कि आपने जो तारीख दिखायी है वह 40723.6371916281 जैसा ही है। बेवकूफ इंसान इसे बस "डेटाटाइम" के रूप में पूरी तरह से इलाज करके, आपको कोई समस्या नहीं होनी चाहिए।

+0

बस कुछ भी वापस नहीं मिल रहा है। नोट: मैं केवल इतना कह रहा था। स्ट्रिंग था ... क्योंकि मैं डीबगर में देख रहा हूं। लेकिन जब मैं उपरोक्त कोड चलाता हूं तो यह किसी भी पंक्ति को प्राप्त नहीं करेगा। मैं इसे कैसे डिबग कर सकता हूं? – Exitos

+0

@ Pete2k अच्छी तरह से, क्या कोई मिलान डेटा है? और यह '' 'बनाम'> = 'मुद्दा है? –

+0

मैंने एक अद्यतन – Exitos

6

मुझे सी # और एसक्यूएल सर्वर से जुड़े कई मुद्दे थे।

  1. एसक्यूएल सर्वर पर मैं दिनांक समय स्तंभ प्रकार
  2. का उपयोग ग # पर मैं .ToString का उपयोग करें ("yyyy-MM-dd hh:: mm: ss") विधि
मैं निम्न कार्य समाप्त हो गया

यह भी सुनिश्चित करें कि आपकी सभी मशीनें एक ही समय क्षेत्र पर चलती हैं।

अलग परिणाम सेट आप अपने पहले उदाहरण "जुलाई पहले" जबकि दूसरा "4 जुलाई" ... है

इसके अलावा, दूसरे उदाहरण के रूप में भी व्याख्या की जा सकती है मिल के बारे में

"7 अप्रैल", यह आपके सर्वर स्थानीयकरण विन्यास पर निर्भर करता है (मेरा समाधान इस मुद्दे से पीड़ित नहीं है)।

+1

'जोड़ा है।" टॉस्ट्रिंग ("yyyy-MM-dd hh: mm: ss") अस्पष्टता को खत्म करने का सबसे अच्छा तरीका नहीं है; टाइप किया गया डेटा पास करना बेहतर तरीका है, इसलिए संदिग्ध नहीं है। किसी भी विशेष प्रारूप के साथ 'ToString (...)' का उपयोग करने के मामले में प्रश्न * कोड * बेहतर है। –

+2

प्रश्न में कोड एक कारण या किसी अन्य के लिए काम नहीं करता है, इसलिए बेहतर समाधान कोड काम करेगा और अपेक्षित परिणाम प्रदान करेगा। बाद में इस बात पर विचार करने के लिए बहुत सी चीजें हैं कि "बेहतर" समाधान की राशि क्या होगी। – Eden

+0

मैं '.ToString (yyyy-MM-ddThh: mm: ss) का उपयोग करता हूं। किसी भी तरह से मैं हमेशा जानता हूं कि क्या उम्मीद करनी है। SqlDateTime को निर्दिष्ट करने के लिए एक बार मेरे लिए काम नहीं किया, मैं '2012-01-30 पूर्वाह्न 10: 15: 30' होने के साथ समाप्त हुआ, जबकि एसक्यूएल में यह' 2012-01-30 10: 15: 30' था। वास्तव में यकीन नहीं है कि क्यों ... बस मेरे 2 सेंट – nomail

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