MySQL दिनांक / समय मान को System.DateTime में परिवर्तित करने में असमर्थ


85

मुझे यह त्रुटि मिली:

MySQL दिनांक / समय मान को System.DateTime में परिवर्तित करने में असमर्थ

जब मैं एक MySQL डेटाबेस से डेटा लाने की कोशिश कर रहा हूँ। मेरे पास तारीख मेरी MySQL डेटाबेस में डेटाप्रकार। लेकिन मेरे डेटाटेबल में इसे पुनः प्राप्त करते समय, यह ऊपर की त्रुटि प्राप्त करता है।

मैं इसे कैसे ठीक करूं?


जवाबों:


51

यदि मैं "MySQL दिनांक / समय मान को System.DateTime में परिवर्तित करने में असमर्थ" के लिए Google करता हूँ, तो मुझे Visual Studio से MySQL तक पहुँचने में समस्या के कई संदर्भ मिलते हैं। क्या यह आपका संदर्भ है?

सुझाया गया एक समाधान है:

यह बग नहीं बल्कि अपेक्षित व्यवहार है। कृपया कनेक्ट विकल्पों के तहत मैनुअल की जांच करें और संलग्न चित्रों पर "शून्य शून्य काल" को सही पर सेट करें, और त्रुटि दूर हो जाएगी।

संदर्भ: http://bugs.mysql.com/bug.php?id=26054


2
मेरा सुझाव है कि दिनांक / समय स्तंभों में अपने डेटा के रूप में '0000-00-00 00:00:00' का उपयोग न करें। अपने डेटा में वास्तविक तिथि मानों का उपयोग करें - यदि आप .net का उपयोग कर रहे हैं। हालाँकि, MySQL किसी भी तारीख को संभाल सकता है। आपको अपनी सभी दिनांक / समय मानों के माध्यम से स्कैन करना चाहिए।
बिमल पौडेल

212

आपको Convert Zero Datetime=Trueअपने कनेक्शन स्ट्रिंग में जोड़ना होगा , उदाहरण के लिए:

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True

3
धन्यवाद! FYI करें: यह MySQL कनेक्शन स्ट्रिंग पर जाता है - SQL सर्वर कनेक्शन स्ट्रिंग पर नहीं।
jp2code

मेरा समय बचाया। एक आकर्षण की तरह काम किया
Null Pointer

+1 - बिल्कुल सही! मेरे पास शून्य डेटासेट था क्योंकि जब कॉलम टेबल पर नहीं लिखा था MySQL शून्य डेटाटाइम। मैं इसे इतना 0970-01-01.Thanks आप अभी से बदल पसंद करते हैं
Drako

21

मैं दोनों जोड़ा Convert Zero Datetime=Trueऔर Allow Zero Datetime=Trueऔर यह ठीक काम करता है


3

डेटाइम मान को एक स्ट्रिंग के रूप में नीचे खींचें और ए करें DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles); आपको डेटाबेस से वापस आने की तारीख के लिए आपको तिथि प्रारूप सेट करना होगा। सबसे अधिक संभावना है yyyy-MM-dd HH:mm:ss। कम से कम मेरे लिए है।

यहाँ पर अधिक जानकारी की जाँच करें DateTime.ParseExact



2

मैंने भी इसी समस्या का सामना किया, और कॉलम नाम और इसके प्रकार प्राप्त किए। फिर तालिका नाम से कास्ट (col_Name as Char)। इस तरह से मुझे '0000-00-00 00:00:00' के रूप में समस्या आती है, फिर मैं वैध तिथि के रूप में अद्यतन करता हूं और मेरे मामले के लिए त्रुटि दूर हो जाती है।


1

आप MySql द्वारा उपयोग की जाने वाली दिनांक और समय के अनुसार एप्लिकेशन को पूरी तरह से संगत बना सकते हैं। जब अनुप्रयोग रनटाइम पर चलता है तो यह कोड प्रदान करता है। सबसे पहले एप्लिकेशन इवेंट्स पर जाएं। उपकरणों की सूची में

  1. प्रोजेक्ट पर जाएं
  2. परियोजना के गुण
  3. एप्लिकेशन टैब चुनें
  4. एप्लिकेशन ईवेंट देखें

यह एक नई फ़ाइल खोलेगा। इस फ़ाइल में एप्लिकेशन के प्रारंभ में उपयोग किया गया कोड है।

इस कोड को उस नई फ़ाइल में लिखें:

 Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        My.Application.ChangeCulture("en")
        My.Application.ChangeUICulture("en")
        My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
        My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
    End Sub


End Class

1

कनेक्शन स्ट्रिंग को बदलने के बजाय, आप ऑब्जेक्ट की IsValidDateTimeसंपत्ति का उपयोग करके MySqlDateTimeयह निर्धारित करने में मदद कर सकते हैं कि क्या आप ऑब्जेक्ट को एक के रूप में डाल सकते हैं DateTime

मेरे पास एक परिदृश्य था जहां मैं "अपडेटटाइम" कॉलम से डेटा लोड करने की कोशिश कर रहा था जो केवल स्पष्ट रूप से सेट होने के दौरान था जब पंक्ति के लिए एक अपडेट था (जैसा कि हमेशा सेट किया गया था, इनसरजेट के विपरीत)। इस मामले के लिए, मैंने इस MySqlDataReader.GetMySqlDateTimeतरह विधि का उपयोग किया :

using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
    if (await reader.ReadAsync())
    {
        DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
    }
}

0

यदि "शून्य डेटाइम = सत्य की अनुमति दें" काम नहीं कर रहा है, तो निम्न टांके का उपयोग करें: -

इसे अपने कनेक्शन स्ट्रिंग में जोड़ें: "शून्य डेटाइम = नहीं" की अनुमति दें - जिसने टाइप कास्ट को पूरी तरह से काम किया।


0

एक Stimulsoft रिपोर्ट में इस पैरामीटर को कनेक्शन स्ट्रिंग में जोड़ें (डेटा स्रोत पर राइट क्लिक करें-> संपादित करें)

Convert Zero Datetime=True;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.