我一直在进行代码审核,我遇到了一个代码,它设置了这样的日期:
ContentView
此代码将更新设置日期和停用人员的项目(请注意,我们在此设置时间' DateTime.Now',来自Web服务器的时间代码被执行)
但与此同时,我们有一个更新项目的存储过程,而存储过程也设置了DeactivateDt
using (var cmd = new SqlCommand("Item_Update", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@ItemId", item.Id));
cmd.Parameters.Add(new SqlParameter("@Active", false));
cmd.Parameters.Add(new SqlParameter("@DeactivatedBy", item.DeactivatedBy));
cmd.Parameters.Add(new SqlParameter("@DeactivatedDt", DateTime.Now));
cmd.ExecuteNonQuery();
}
这两种情况都没有错,但我想知道在设定日期时首选模式是什么:
不确定这是否是一个非常有趣的问题,但由于我不能100%确定要对我的代码审核做出什么回应,所以我决定问你们。
感谢您的帮助。
答案 0 :(得分:2)
此后如何使用数据?如果它用于任何类型的过滤,那么最重要的是一致。
E.g。如果代码和SQL在具有小时间差的不同机器上运行,那么如果您使用不同的时钟,则可以停用一行,然后在不久之后查询活动行返回相同的行。 / p>
最好选择一个时钟并在任何地方使用它 - 不仅仅是这个例子,而是那个时间很重要的地方。
如果该时钟是SQL Server的时钟,通常会更容易。
答案 1 :(得分:0)
老实说,无论您是从应用层还是数据库层更新日期都无关紧要。这也可能是业务需求。然而,从标准化和标准化来看,保持应用程序的一致性更为重要。审计观点。如果出现任何问题,此标准化将有助于将来审核应用程序。
但是,在这种情况下,如果有机会,我会建议DB层自动更新日期,默认值为GETDATE(),插入新记录时。
再次为了在更新时保持一致性,如果您的要求是为所有人设置相同的日期,您可以执行以下操作:
DECLARE @currDate DATETIME;
SET @currDate = GETDATE();
UPDATE table SET date = @currDate;
(注意:上面的代码未经测试)