保存到我的数据库时,我应该从哪里获取日期?

时间:2016-09-08 09:06:47

标签: sql date

我一直在进行代码审核,我遇到了一个代码,它设置了这样的日期:

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();
}

这两种情况都没有错,但我想知道在设定日期时首选模式是什么:

  1. 从代码
  2. 设置日期
  3. 从SQL Server
  4. 设置日期

    不确定这是否是一个非常有趣的问题,但由于我不能100%确定要对我的代码审核做出什么回应,所以我决定问你们。

    感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

此后如何使用数据?如果它用于任何类型的过滤,那么最重要的是一致

E.g。如果代码和SQL在具有小时间差的不同机器上运行,那么如果您使用不同的时钟,则可以停用一行,然后在不久之后查询活动行返回相同的行。 / p>

最好选择一个时钟并在任何地方使用它 - 不仅仅是这个例子,而是那个时间很重要的地方。

如果该时钟是SQL Server的时钟,通常会更容易。

答案 1 :(得分:0)

老实说,无论您是从应用层还是数据库层更新日期都无关紧要。这也可能是业务需求。然而,从标准化和标准化来看,保持应用程序的一致性更为重要。审计观点。如果出现任何问题,此标准化将有助于将来审核应用程序。

但是,在这种情况下,如果有机会,我会建议DB层自动更新日期,默认值为GETDATE(),插入新记录时。

再次为了在更新时保持一致性,如果您的要求是为所有人设置相同的日期,您可以执行以下操作:

DECLARE @currDate DATETIME;

SET @currDate = GETDATE();

UPDATE table SET date = @currDate;

(注意:上面的代码未经测试)