Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 22966|Yanıt: 1

[Kaynak] spring.net nhibernate SQLatDateTime overflow solution

[Bağlantıyı kopyala]
Yayınlandı 13.09.2017 14:34:58 | | | |
SqlDateTime overflow. 1/1/1753 00:00:00 ile 31/12/9999 23:59:59 arasında olmalı




Web sitesinden güncelleme işlemi yaparken sürekli bir hata alıyordum ve SQL ifadesi çalıştırıldığında XML yapılandırmasında ya da bir şeylerin ters gittiğini sandım

Oluşturulan SQL ifadelerini almak için SQL sorgu analizörü kullanmayı denedim ve doğru yürütmenin sorunu nedir? SQL ifadesi şöyledir:

Yönetici sp_executesql N'INSERT DBO'ya giriyor. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, nowLeanAlarmType, InsertTime, TreatedTime) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6); select SCOPE_IDENTITY()',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 datetime,@p6 datetime',@p0=1,@p1=35,@p2=12,@p3=10,@p4=10,@p5='2017-09-13 13:09:41',@p6=NULL
SqlDateTime overflow. Bir çözüm, 1/1/1753 00:00:00 ile 31/12/9999 23:59:59 arasında --- olmalıdır

Hata nedeni

    Veritabanına aktarılan zaman türünün değeri NULL ise veya DateTime.MinValue için veritabanı eklenirken veya güncellenirken, tarih zaman alanı değeri varsayılan olarak null olur.
    NULL burada program kodundaki null'u ifade eder ve bunun gerçekleştiği çoğu senaryo şudur: programda zaman tipi bir değişken tanımlanır ve değer atamadan veritabanına (veya saklanan prosedüre) iletilir. Bu anda, bu değişkenin değeri varsayılan olarak 01/01/01 olarak atanmıştır.
     Veritabanındaki DateTime tür alanı olduğundan, minimum değer 1/1/1753 12:00:00 iken, . NET Framework, DateTime türü, minimum değer 1/1/0001 0:00:00'dır, açıkçası, sql değerinin minimum değer aralığının dışındadır ve veri taşması hatasına yol açar.
    C# ile .net ve sql maksimum minimum zamanı nasıl görebileceğimize bir göz atalım:


Çıkış etkisi:



Sonunda, on dakikadan fazla oynandı,

Son hata nedenleri şunlardır:

Nesnenin öznitelik tiplerinden biri de bir nesnedir; yani tablonun yabancı anahtarı vardır ve yabancı anahtar tablosuna yeni bir datetime özniteliği eklenir; bu atama değer atanmazdı ve nullable bir tipe ayarlanmaz.

Bir nesne eklendiğinde veya güncellendiğinde, yabancı anahtar nesnesinin datetime otomatik olarak varsayılan değere eklenir, çünkü .net varsayılan değerinin zamanı, veritabanının varsayılan minimum zamanından küçüktür

Çözüm: Yabancı anahtar nesnesinin datetime tipinin özelliğini nullable tipe ayarlayın, meslektaşlarınızın bunu mükemmel çözmesine yardımcı olun!







Önceki:.net/c# işlemi Redis önbellek ekleme, silme, değişiklik ve sorgulama [kaynak kodu]
Önümüzdeki:asp.net Web sitesi anomali hata analizi
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com