2016-09-08 59 views
-1

我一直在做代碼審查,我遇到這是設置這樣的日期代碼:保存到我的數據庫時應該從哪裏取日期?

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

此代碼將更新項目設定日期,當它被停用的人(請注意在這裏,我們設置時間'DateTime.Now',從代碼執行時從web服務器的時間)

但同時,我們有一個存儲過程更新項目和存儲過程集DeactivateDt

UPDATE item 
SET active = 0, 
    chdt = GETDATE(), 
    DeactivatedBy = @ExecUserName, 
    DeactivatedDt = GETDATE() 
FROM  
    item 
WHERE 
    id = @itemId; 

有什麼不對任何兩種情況是,但我想知道的是,當涉及到設置日期的首選模式:

  1. 設定從碼
  2. 設置從SQL Server中的日期的日期

不確定這是一個非常有趣的問題,但由於我並不是100%確定要對代碼審查做出什麼迴應,所以我決定問你們。

感謝您的幫助。

+0

使用SQL的'current_date'。 – jarlh

+0

使用可以使用由'SQL'提供的日期函數,它是'getdate()'的更多信息看看[這裏](http://www.w3schools.com/sql/func_getdate.asp) – BNN

+1

標記dbms你正在使用。那裏有一些非ANSI SQL。 – jarlh

回答

0

說實話,無論你是從應用層還是數據庫層更新日期,都沒關係。這也可能是商業需求。但是,從審計的角度來看,跨應用程序保持一致性更重要。這種標準化將有助於在未來審覈應用程序,以防出現任何問題。

但是,在這種情況下,如果有機會,我會建議DB層在插入新記錄時自動更新日期,默認值爲GETDATE()。

再次保持一致,同時更新,如果您的要求是設置在同一日期的所有,你可以這樣做如下:

DECLARE @currDate DATETIME; 

SET @currDate = GETDATE(); 

UPDATE table SET date = @currDate; 

(注:上面的代碼是未經測試)

2

以後如何使用數據?如果它用於任何種類的篩選,那麼最重要的是一致的

E.g.如果代碼和SQL在具有小時間差的不同計算機上運行,​​那麼如果使用不同的時鐘,則可以停用某一行,然後在查詢活動行後立即返回相同的行。

更好的選擇一個時鐘,並在任何地方使用它 - 不僅僅是爲了這個例子,而是在任何時候都很重要。

如果該時鐘是SQL Server的時鐘通常更容易。

+0

我以爲和你一樣。謝謝您的回答 – SergioKastro

相關問題