【发布时间】:2015-07-16 20:53:26
【问题描述】:
我有一个 Telerik 数据访问项目的解决方案。尝试更新记录时遇到问题。我认为问题与在尝试更新它之前它是数据库中具有空值的日期字段这一事实有关,但我不确定。谁能告诉我如何解决它?
在 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 设置为今天的日期,并且我已经验证该模型在点击 SaveChanges() 命令时确实具有 ModOn 的值。如果我手动在数据库中的 ModBy 中输入一个值,则更新将按预期工作。这就是为什么我认为 ModOn 最初为 null 可能是问题所在。
进入本节时出现的错误(我已经单步执行了代码,错误来自 dat.SaveChanges)是这样的:
“/”应用程序中的服务器错误。 SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59。
异常详细信息:System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 之间 下午。
[SqlTypeException:SqlDateTime 溢出。必须在 1753 年 1 月 1 日之间 12:00:00 AM 和 12/31/9999 11:59:59 PM。]
Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeUpdate(Nullable 1 命令超时) +785
OpenAccessRuntime.Relational.conn.PooledPreparedStatement.executeUpdate(Nullable`1 命令超时)+146
OpenAccessRuntime.Relational.RelationalStorageManager.generateUpdates(OID oid,Int32 索引,ClassMetaData cmd,PersistGraph 图,Int32[] fieldNos, Boolean haveNewObjects, CharBuf s, BatchControlInfo batchControl, Boolean previousInserts) +3385[DataStoreException:更新失败: System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出。一定是 在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。在 Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeUpdate(可空 1 命令超时)在 OpenAccessRuntime.Relational.conn.PooledPreparedStatement.executeUpdate(Nullable1 命令超时)在 OpenAccessRuntime.Relational.RelationalStorageManager.generateUpdates(OID oid,Int32 索引,ClassMetaData cmd,PersistGraph 图,Int32[] fieldNos, Boolean haveNewObjects, CharBuf s, BatchControlInfo batchControl, Boolean previousInserts) 行:GenericOID@91ae60ab tblCoLocation LocID=5 更新 [tblCoLocation] 设置 [Address2] = ?, [国家] = ?, [ModBy] = ?, [ModOn] = ?在哪里 [LocID] = ?和 [地址2] = ?和 [国家] = ?和 [ModBy] = ?和 [ModOn] = ? (放 事件记录到所有人以查看参数值) System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出。一定是 在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。在
我是否正确地猜测是数据库中 ModOn 的初始空值导致了问题?如果是这样,如何在不改变 ModOn 初始值的情况下保存这条记录?
【问题讨论】:
标签: c# sql telerik telerik-mvc telerik-open-access