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!
|