我發現了一個不幸的副作用,即從 SQL Server 日期時間列存盤和補充 C# DateTime 會稍微改變它,因此相等運算子不再有效。
例如,使用 EF:
FileInfo fi = new FileInfo("file.txt");
Entity.FileTimeUtc = fi.LastWriteTimeUtc;
我們發現
(Entity.FileTimeUtc == fi.LastWriteTimeUtc) // true
但是如果我們保存該物體然后從 SQL Server 重新加載它,我們會發現
(Entity.FileTimeUtc == fi.LastWriteTimeUtc) // false
我知道由于 .NET DateTime 和 SQL datetime 之間的內部存盤格式不同,這里發生了一個舍入程序(如果只有幾毫秒)。
我正在尋找的是一個能夠可靠地模擬這種轉換的程序,并將本機 DateTime 值與那些從 SQL 日期時間欄位存盤和重新水化的值對齊,以使相等性測驗再次有效。
uj5u.com熱心網友回復:
這是因為 SQL Server 的DateTime型別以 3 和 4 毫秒“滴答”為單位計算時間,并帶有一些非常奇怪的“舍入”規則。
有關這些舍入規則的詳細資訊,請參閱我對問題的回答“ SqlDateTime 如何降低精度? ”。
這將允許您在 .Net 中進行完全相同的轉換。
此外,我相信如果將 C#/.NetDateTime值轉換為System.Data.SqlTypes.SqlDateTime將執行相同的轉換(但我不能發誓——我不得不為此爭論已經有一段時間了)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420775.html
標籤:
上一篇:WPF將按鈕與命令系結但無法觸發
