默认日期时间值显示在日期时间列中随机记录的数据表中,即使我没有在任何地方分配值

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'

每次我运行我的代码时,这个默认日期时间值都会针对不同的记录显示。 有时对于所有记录,此值为 null

我无法理解,为什么默认值显示在我的日期列中。 即使我没有在这些单元格中设置任何内容,每个单元格的值也不相同。

请帮我解决这个问题。

【问题讨论】:

该列是否可以为空DateTimedefault(DateTime)DateTime.MinValue 是的,它可以为空。 【参考方案1】:

ADO.NET 类是 not safe,用于多线程 write 操作。根本不允许使用Parallel.ForEach 来从多个线程并行更新DataTable,而无需同步。如果你这样做,结果是不确定的。您可能会遇到异常、丢失数据、获取损坏的数据、获取损坏的内部状态等等。没有人知道究竟会发生什么,但结果令人满意的可能性微乎其微。

【讨论】:

我们可以使用 WCF 数据契约的对象而不是数据表吗? @Vidhi 不幸的是,我对数据合同知之甚少。

以上是关于默认日期时间值显示在日期时间列中随机记录的数据表中,即使我没有在任何地方分配值的主要内容,如果未能解决你的问题,请参考以下文章

C# 后台如何向SQL数据库中插入一定时间范围内的随机日期值,到日就可以!!

匹配Excel中同一列中两个日期之间的所有值

SQL中哪个字段类别记录日期和哪个字段类别记录时间

C#,遍历数据集并显示数据集列中的每条记录

在 Pandas 数据框列中填充缺失的日期值

在列中显示两个不同日期的数据