MySQL tarih / saat değeri System.DateTime'a dönüştürülemiyor


86

Bu hatayı alıyorum:

MySQL tarih / saat değeri System.DateTime'a dönüştürülemiyor

Verileri bir MySQL veritabanından almaya çalışırken. Ben tarih benim MySQL veritabanında veri türü. Ama onu benim datatable'ıma geri getirirken yukarıdaki hatayı alıyor.

Bunu nasıl düzeltebilirim?


Yanıtlar:


51

"MySQL tarih / saat değeri System.DateTime'a dönüştürülemiyor" diye google'da arama yaparsam, MySQL'e Visual Studio'dan erişirken bir sorunla ilgili çok sayıda referans görüyorum. Bu senin bağlamın mı?

Önerilen bir çözüm şudur:

Bu bir hata değil, beklenen bir davranıştır. Lütfen bağlantı seçenekleri altındaki kılavuzu kontrol edin ve ekli resimlerde olduğu gibi "Sıfır Tarih Saatine İzin Ver" öğesini doğru olarak ayarlayın; hata ortadan kalkacaktır.

Referans: http://bugs.mysql.com/bug.php?id=26054


2
Tarih / saat sütunlarında verileriniz olarak '0000-00-00 00:00:00' kullanmamanızı öneririm. Bunun yerine, verilerinizde gerçek tarih değerleri kullanın - .net kullanıyorsanız. Ancak MySQL herhangi bir tarihi işleyebilir. Tüm tarih / saat değerlerinizi taramalısınız.
Bimal Poudel

215

Convert Zero Datetime=TrueBağlantı dizenize eklemeniz gerekir , örneğin:

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

3
Teşekkürler! Bilginize: Bu, SQL Server bağlantı dizesine değil, MySQL bağlantı dizesine gider.
jp2code

zamanımı kurtardım. Cazibe gibi çalıştı
Null Pointer

+1 - Mükemmel! Sıfır veri saatim vardı çünkü sütun doldurulmadığında MySQL tablosuna sıfır tarih saati yazıyordu. Şu andan itibaren 0970-01-01 için değiştirmeyi tercih ederim. Çok teşekkürler
Drako

21

i hem katma Convert Zero Datetime=True& Allow Zero Datetime=Trueve cezası işleri


3

Tarih saat değerini bir dize olarak aşağı çekin ve bir yapın DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);. Veritabanından döndüğünüz tarih için tarih formatını ayarlamanız yeterlidir. Büyük ihtimalle öyle yyyy-MM-dd HH:mm:ss. En azından benim için.

Burada daha fazla bilgi kontrol edin DateTime.ParseExact


2

MySql'in unix zaman damganızı dizeye dönüştürmesine izin verin. Mysql işlevini kullanın FROM_UNIXTIME (113283901)


2

Ben de aynı sorunla karşılaştım ve sütunların adını ve türlerini aldım. Daha sonra tablo adından (karakter_adı olarak sütun_adı) çevirin. Bu şekilde sorunu '0000-00-00 00:00:00' olarak alıyorum ve ardından hatanın durumum için geçerli bir tarih ve saat olarak güncellenmesini sağlıyorum.


1

Uygulamayı MySql tarafından kullanılan tarih ve saat ile tam uyumlu hale getirebilirsiniz. Uygulama çalışma zamanında çalıştığında bu kodu sağlayın. Önce Uygulama Etkinliklerine gidin. Araçlar listesinde

  1. Projeye git
  2. Proje Özellikleri
  3. Uygulama sekmesini seçin
  4. Uygulama Olaylarını Görüntüleyin

Bu yeni bir dosya açacaktır. Bu dosya, uygulamanın başında kullanılan kodu içerir.

Bu kodu o yeni dosyaya yazın:

 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

Aksine bağlantı dizesini değiştirmek yerine kullanabileceğiniz IsValidDateTimeözelliğini MySqlDateTimebir şekilde nesneyi yayınlayabileceğim olmadığını belirlemenize yardımcı olması için nesne DateTime.

Yalnızca satırda bir güncelleme olduğunda (her zaman ayarlanmış olan InsertedTime'ın aksine) açıkça ayarlanmış bir "UpdateTime" sütunundan veri yüklemeye çalıştığım bir senaryom vardı. Bu durumda şu MySqlDataReader.GetMySqlDateTimeyöntemi kullandım :

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

0

eğer "sıfır datetime = true izin" şu sollutions kullanın sonra çalışmıyor: -

Bunu bağlantı dizenize ekleyin: "allow zero datetime = no" - bu, türünün mükemmel çalışmasını sağladı.


0

Bir Stimulsoft raporunda bu parametreyi bağlantı dizesine ekleyin (veri kaynağına sağ tıklayın -> düzenle)

Convert Zero Datetime=True;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.