背景損失精度
字段TimestampCreation作爲這樣在DB中創建:
[TimestampCreation] [datetime2](7) NOT NULL
如果我的字段添加到這樣的數據表:
table.Columns.Add(new DataColumn("TimestampCreation", typeof(DateTime)));
值損失精度,因爲它存儲就像這樣:
2016-12-07 11:38:39.4990000
當它應該是
2016-12-07 11:38:39.4998426
一個解決辦法我試過
如果我添加列像這樣:
table.Columns.Add(new DataColumn("TimestampCreation", typeof(string))); // Actually datetime2
值被正確地存儲到數據庫,但這感覺很髒/哈克。
在代碼使用
值被設定如下:
public static void AddToTable(this EntityDto source, DataTable table)
{
var row = table.NewRow();
...
...
row["TimestampLastModification"] = source.TimestampLastModification;
table.Rows.Add(row);
}
哪裏source.TimestampLastModification
是DateTime
類型:
public DateTime TimestampLastModification { get; set; }
接下來的數據表被保存到存儲這樣:
Root.PluginManager().PersistentStorage(ParametersHelper.OverallSchema).Insert(ref table)
問題
什麼是一個datetime2
字段添加到一個DataColumn並保持預期的精度的正確方法?
將數據從DataTable傳輸到數據庫的代碼在哪裏?這就是事情弄糟的地方,'DATETIME'被用作類型而不是'DATETIME2'。 'System.DateTime'本身具有足夠的精度,'DataColumn'只是按原樣存儲值。 –
好的,我會更新。 – Spikee
這仍然缺少將*寫入數據庫的代碼(或將其讀入'EntityDto',取決於您的方案)。 'table'只是一個內存中的表示,不是你的問題。 –