ฉันมีวิธีแก้ปัญหาสำหรับโครงการ Telerik Data Access ฉันพบปัญหาขณะพยายามอัปเดตบันทึก ฉันคิดว่าปัญหาเกี่ยวข้องกับความจริงที่ว่ามันเป็นเขตข้อมูลวันที่ที่มีค่าว่างในฐานข้อมูลก่อนที่จะพยายามอัปเดต แต่ฉันไม่แน่ใจ ใครช่วยบอกฉันหน่อยว่าจะแก้ไขมันอย่างไร?
ในโครงการ MVC เรามีโมเดลที่เรียกว่า tblCoLocation มันเชื่อมโยงกับฐานข้อมูล SQL ของเรา โหมดนี้ถูกกำหนดไว้ในโครงการ Data Access เป็น
namespace Project.OpenAccess
{
public class tblCoLocation
{
public int LocID { get; set; }
...
public DateTime ModOn { get; set; }
public int ModBy { get; set; }
}
}
หากต้องการอัปเดตข้อมูลในไฟล์ชื่อ Repository.cs ฉันมีวิธีนี้:
public void UpdateCoLocation(tblCoLocation obj)
{
var upd = dat.tblCoLocations.FirstOrDefault(itm => itm.LocID == obj.LocID);
if (upd != null)
{
upd.ModOn = obj.ModOn;
upd.ModBy = obj.ModBy;
}
dat.SaveChanges();
}
ฉันมีรหัสที่คล้ายกันสำหรับการอัปเดตรุ่นอื่น ๆ แต่สำหรับ tblCoLocation มันเกิดข้อผิดพลาด ฟิลด์ ModOn เป็นโมฆะในฐานข้อมูล (นี่คือการออกแบบของลูกค้าของเรา null หมายความว่าบันทึกไม่ได้รับการแก้ไข และพวกเขาต้องการเก็บข้อมูลในลักษณะนั้น) เรากำลังพยายามตั้งค่า ModOn เป็นวันที่ปัจจุบัน และฉันได้ตรวจสอบแล้วว่าโมเดลนั้นมีค่าสำหรับ ModOn เมื่อเข้าถึงคำสั่ง SaveChanges() หากฉันใส่ค่าใน ModBy ในฐานข้อมูลด้วยตนเอง การอัปเดตจะทำงานตามที่คาดไว้ นี่คือเหตุผลที่ฉันคิดว่าการมี ModOn เป็นโมฆะในตอนแรกอาจเป็นปัญหาได้
ข้อผิดพลาดที่เกิดขึ้นเมื่อเข้าถึงส่วนนี้ (ฉันได้อ่านโค้ดแล้วและข้อผิดพลาดมาจาก dat.SaveChanges) คือ:
ผิดพลาดเซิร์ฟเวอร์ใน '/' แอพลิเคชัน. SqlDateTime ล้น จะต้องเป็นระหว่างวันที่ 1/1/2396 เวลา 00:00:00 น. ถึง 31/12/9999 เวลา 23:59:59 น.
รายละเอียดข้อยกเว้น: System.Data.SqlTypes.SqlTypeException: ล้น SqlDateTime จะต้องเป็นระหว่างวันที่ 1/1/2396 เวลา 00:00:00 น. ถึง 31/12/9999 เวลา 23:59:59 น.
[SqlTypeException: SqlDateTime ล้น ต้องอยู่ระหว่าง 1/1/1753 00:00:00 AM ถึง 31/1/9999 23:59:59 น.]
Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeUpdate (Nullable 1 commandTimeout) +785
OpenAccessRuntime.Relational.conn.PooledPreparedStatement.executeUpdate (Nullable`1 commandTimeout) +146
OpenAccessRuntime.Relational.RelationalStorageManager.generateUpdates (OID oid, ดัชนี Int32, ClassMetaData cmd, กราฟ PersistGraph, Int32 [] fieldNos, บูลีน haveNewObjects, CharBuf s, BatchControlInfo batControl, บูลีน PreviousInserts) +3385[DataStoreException: การอัปเดตล้มเหลว: System.Data.SqlTypes.SqlTypeException: ล้น SqlDateTime จะต้องเป็นระหว่างวันที่ 1/1/2396 เวลา 00:00:00 น. ถึง 31/12/9999 เวลา 23:59:59 น. ที่ Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeUpdate (Nullable 1 commandTimeout) ที่ OpenAccessRuntime.Relational.conn.PooledPreparedStatement.executeUpdate (Nullable1 commandTimeout) ที่ OpenAccessRuntime.Relational.RelationalStorageManager.generateUpdates (OID oid, ดัชนี Int32, ClassMetaData cmd , กราฟ PersistGraph, Int32[] fieldNos, Boolean haveNewObjects, CharBuf s, BatchControlInfo battControl, Boolean PreviousInserts) แถว: GenericOID@91ae60ab tblCoLocation LocID=5 UPDATE [tblCoLocation] SET [Address2] = ?, [Country] = ?, [ModBy] = ?, [ดัดแปลง] = ? โดยที่ [LocID] = ? และ [ที่อยู่2] = ? และ [ประเทศ] = ? และ [ModBy] = ? และ [โมเดอเรเตอร์] = ? (ตั้งค่าการบันทึกเหตุการณ์เป็นทั้งหมดเพื่อดูค่าพารามิเตอร์) System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow จะต้องเป็นระหว่างวันที่ 1/1/2396 เวลา 00:00:00 น. ถึง 31/12/9999 เวลา 23:59:59 น. ที่
ดูเหมือนว่าฉันเดาถูกหรือไม่ว่าค่าว่างเริ่มต้นของ ModOn ในฐานข้อมูลทำให้เกิดปัญหา หากเป็นเช่นนั้น ฉันจะบันทึกบันทึกนี้โดยไม่เปลี่ยนค่าเริ่มต้นของ ModOn ได้อย่างไร