6

我有 DAL,我将数据库空值转换为它们在 C# 中的等效表示。例如:

NULL for Numeric = 0
NULL for String = String.Empty
NULL for DateTime = "1/1/0001" (i.e. DateTime.MinValue)

就日期而言,问题在于表示层,尤其是在 GridViews 中。您不能1/1/01向用户显示。

我以前做的是检查if myDate.Year=1 or myDate.Year < AcceptedDate并显示空字符串,但似乎与其他类型不同的是额外的努力

请愿意接受更好的方法。谢谢。

4

6 回答 6

10

使用Nullable数据类型存储空值。

DateTime? value = null;
int? myNullableInt = 1;
value = DateTime.Now;

如何检查变量是否有值或空值

if (value!=null)

字符串值可以存储空值,因此字符串存储空值没有不同的数据类型。

string var;
if (var == null)

或者

if (String.IsNullOrEmpty(var))
于 2012-06-07T13:08:46.453 回答
6

您还可以使用 DateTime.MinValue 常量。

http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx

你的条件是:

if (myDate == DateTime.MinValue)
于 2012-06-07T13:12:03.513 回答
1

您可以使用Nullable DateTime,因此您将返回DateTime?而不是DateTime从 DAL 中返回。这样您就可以检查返回值是否为空。

DateTime? dateTime = null;
于 2012-06-07T13:08:39.810 回答
1

正如其他人提到的,您可以使用System::Nullable<DateTime>.

我见过的另一种方法是使用标准DateTime并仅使用特殊值,例如DateTime.MinValue. 如果您需要遵守现有接口的类型并且无法将其更改DateTimeNullable<DateTime>.

于 2012-06-07T13:11:15.240 回答
1

您可以按照其他人的建议使用 Nullable DateTime,也可以使用此技巧:(以防止无效的默认值。)

// If dateTime has not been initialize, initialize to Now
// (or to any other legal inital values)
dateTime = ((dateTime != new DateTime()) ? dateTime : DateTime.Now);

如果您必须使用不可为空的 DateTime 并且想要提供默认值(如果没有),则此技巧很有用。(例如,您在数据库中有一个不可为空的 DateTime 列,并且仅当行是新的时才想设置该值。)

于 2012-06-07T13:13:00.373 回答
1

我认为您别无选择,只能像以前一样进行检查并相应地显示。可为空的类型可能会使您的事情变得更容易。根据您的数据,即使是数字也应该以这种方式处理。DBNull != 0。

于 2012-06-07T13:13:28.397 回答