默认日期时间值显示在日期时间列中随机记录的数据表中,即使我没有在任何地方分配值
Posted
技术标签:
【中文标题】默认日期时间值显示在日期时间列中随机记录的数据表中,即使我没有在任何地方分配值【英文标题】:default datetime value is shown in datatable for random records in a datetime column even when I am not assigning the value anywhere 【发布时间】:2020-10-20 08:36:28 【问题描述】:我有一个DataTable
,我在其中添加了一些带有DateTime
数据类型的额外列。
就像这样:MyTable.Columns.Add("myDate",typeof(DateTime));
我没有为此列分配任何值。我只是在 MyTable 中添加一个新行,如下所示:
DataRow dr=null;
dr=MyTable.NewRow();
dr["Name"]= "abc";//updating all the columns except datetime column in the same way.
lock(MyTable)//locking dt as this code is part of
Parallel.ForEach
MyTable.Rows.Add(dr);
MyTable.AcceptChanges();
当我检查 DateTime 列的值时,上述Parallel.ForEach
循环完成后,它显示随机记录的值 '01-01-0001 12:00:00 AM'。
我无法理解,为什么默认值显示在我的日期列中。 即使我没有在这些单元格中设置任何内容,每个单元格的值也不相同。
请帮我解决这个问题。
【问题讨论】:
该列是否可以为空DateTime
? default(DateTime)
是 DateTime.MinValue
。
是的,它可以为空。
【参考方案1】:
ADO.NET 类是 not safe,用于多线程 write 操作。根本不允许使用Parallel.ForEach
来从多个线程并行更新DataTable
,而无需同步。如果你这样做,结果是不确定的。您可能会遇到异常、丢失数据、获取损坏的数据、获取损坏的内部状态等等。没有人知道究竟会发生什么,但结果令人满意的可能性微乎其微。
【讨论】:
我们可以使用 WCF 数据契约的对象而不是数据表吗? @Vidhi 不幸的是,我对数据合同知之甚少。以上是关于默认日期时间值显示在日期时间列中随机记录的数据表中,即使我没有在任何地方分配值的主要内容,如果未能解决你的问题,请参考以下文章