У меня есть решение с проектом Telerik Data Access. При попытке обновить запись возникла проблема. Я думаю, проблема связана с тем, что это поле даты с нулевым значением в базе данных, прежде чем пытаться его обновить, но я не уверен. Может ли кто-нибудь сказать мне, как обойти это?Не удается обновить запись с нулевым значением даты в Telerik Open Access
В проекте MVC у нас есть модель под названием tblCoLocation. Он связан с нашей базой данных SQL. Режим определяется в проекте доступа к данным, как
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/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.
Сведения об исключении: System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.
[SqlTypeException: переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.]
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, Boolean haveNewObjects, CharBuf s, BatchControlInfo batchControl, Boole previousInserts) +3385[DataStoreException: Ошибка обновления: System.Data.SqlTypes.SqlTypeException: переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 12/31/9999 11:59:59 PM. на 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, булевы haveNewObjects, CharBuf сек, BatchControlInfo batchControl, булевы previousInserts) Ряд: GenericOID @ 91ae60ab tblCoLocation LocID = 5 ОБНОВЛЕНИЕ [tblCoLocation] SET [ Address2] =?, [Страна] =?, [ModBy] =?, [ModOn] =? WHERE [LocID] =? И [Адрес2] =? И [Страна] =? И [ModBy] =? И [ModOn] =? (установить регистрацию событий для всех, чтобы увидеть значения параметров) System.Data.SqlTypes.SqlTypeException: переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 12/31/9999 11:59:59 PM. на
Похоже, что я прав, угадывая, что это начальное значение null ModOn в базе данных вызывает проблему? Если да, то как сохранить эту запись, не изменяя начальное значение ModOn?
Спасибо за ваш ответ. Это была одна из первых вещей, о которых я думал, и я убедился, что я установил ModOn. Как я уже сказал в своем первоначальном сообщении, я прошел через код и проверил оба obj.ModOn и upd.ModOn имеют значение, когда он переходит к вызову SaveChanges(). Я даже пробовал даты жесткого кодирования для них, и это привело к той же ошибке. – boilers222
@ boilers222 Попробуйте настроить состояние объекта для изменения до сохранения() – JamieD77