设置一个空的 DateTime 变量

Posted

技术标签:

【中文标题】设置一个空的 DateTime 变量【英文标题】:Set an empty DateTime variable 【发布时间】:2012-04-16 11:48:07 【问题描述】:

我会像这样声明一个空字符串变量:

    string myString = string.Empty;

“日期时间”变量是否有等价物?

更新:

问题是我使用这个“DateTime”作为 SQL 中“StoredProcedure”的参数。 例如:

    DateTime? someDate = null;
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);

当我运行此代码时,捕获到一个异常,告诉我“StoredProcedure”需要一个“@SurgeryDate”参数。 但我提供了。 知道为什么吗?

【问题讨论】:

【参考方案1】:

由于DateTime 是一种值类型,您不能将null 分配给它,但正是针对这些情况(没有值)引入了Nullable<T> - 请改用可为空的DateTime

DateTime? myTime = null;

【讨论】:

此“可空”日期时间是否适合日期时间类型的 SQL 数据库列?我是新手。 是 - 如果该列允许插入空值 @PhaDaPhunk 大多数数据库都会设置是否可以将值设置为 null。 正如我之前所说,您应该检查您的数据库架构。列是否可以为空是一个设置;你需要检查它是否设置,如果没有设置它。 @PhaDaPhunk:在这种情况下,您必须检查null 并插入DBNull.Value,否则myTime.Value【参考方案2】:

没有。你有两个选择:

DateTime date = DateTime.MinValue;

这适用于你需要每隔 X 时间做某事(因为你总是会超过 MinValue)但实际上可能会导致细微的错误(例如使用一些运算符而不首先检查你是否不是 @987654323 @) 如果你不小心的话。

你可以使用Nullable:

DateTime? date = null;

这很好,并且在只引入 1 或 2 时避免了大多数问题。

这真的取决于你想要达到的目标。

【讨论】:

【参考方案3】:

您可以将 DateTime 变量设置为“1/1/0001 00:00:00”,但变量本身不能为空。要获得此 MinTime,请使用:

DateTime variableName = DateTime.MinValue;

【讨论】:

【参考方案4】:

您可能希望使用可为空的日期时间。 Datetime? someDate = null;

您可能会发现有人在这种情况下使用DateTime.MaxDateTime.Min,但我非常怀疑您是否愿意这样做。它会导致出现边缘情况的错误、难以阅读的代码等。

【讨论】:

【参考方案5】:

您使用的方法 (AddWithValue) 不会将 null 值转换为数据库空值。你应该改用DBNull.Value

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate
);

如果不是null,这将传递someDate 值,否则传递DBNull.Value。在这种情况下,正确的值将被传递到数据库。

【讨论】:

好的,我喜欢这种方法,但你能解释一下最后一行吗? @PhaDaPhunk:这是针对更一般的场景 - 您有一个 Nullable<DateTime> 类型的变量 someDate。如果它的值为null,我将DBNull.Value 传递给AddWithValue 方法。否则我会传递值本身。 谢谢,我不知道我们能做到这一点!【参考方案6】:

要么:

DateTime dt = new DateTime();

DateTime dt = default(DateTime);

【讨论】:

【参考方案7】:

如果您将日期设置为

DateTime dNewDate = new DateTime();

值设置为 1/1/0001 12:00:00 AM

【讨论】:

【参考方案8】:

选项 1:使用可为空的 DateTime?

选项 2:使用 DateTime.MinValue

就个人而言,我更喜欢选项 1。

【讨论】:

【参考方案9】:

string 是一个字符序列。所以有一个空的string 是有意义的,它只是一个空的字符序列。

但是DateTime 只是一个单一的值,所以谈论“空”DateTime 是没有意义的。

如果要表示“无价值”的概念,在.Net 中表示为null。如果你想将它与值类型一起使用,你需要明确地使它们可以为空。这意味着要么使用Nullable<DateTime>,要么使用等效的DateTime?

DateTime(就像所有值类型一样)也有一个默认值,它分配给未初始化的字段,您也可以通过new DateTime()default(DateTime) 获取它。但您可能不想使用它,因为它代表有效日期:1.1.0001 0:00:00。

【讨论】:

【参考方案10】:

没有空日期本身,你的意思是这样的:

DateTime? myDateTime = null;

【讨论】:

【参考方案11】:

.addwithvalue 需要 dbnull。 你可以这样做:

DateTime? someDate = null;
//...
if (someDate == null)
    myCommand.Parameters.AddWithValue("@SurgeryDate", DBnull.value);

或者使用方法扩展...

  public static class Extensions
    
        public static SqlParameter AddWithNullValue(this SqlParameterCollection collection, string parameterName, object value)
        
            if (value == null)
                return collection.AddWithValue(parameterName, DBNull.Value);
            else
                return collection.AddWithValue(parameterName, value);
        
    

【讨论】:

【参考方案12】:

这适用于可以为空的 dateTime 参数

。 .

SearchUsingDate(DateTime? StartDate, DateTime? EndDate)
     DateTime LastDate;
     if (EndDate != null)
       
          LastDate = (DateTime)EndDate;
          LastDate = LastDate.AddDays(1);
          EndDate = LastDate;
        

【讨论】:

以上是关于设置一个空的 DateTime 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Nullable DateTime 变量的 null 值转换为 DbNull.Value

datetime 空值显示

.NET DateTime类型变量作为参数时设置默认值

如何从数据库中获取可为空的 DateTime

使用 C# DateTime 将 SQL 日期时间设置为最小值

将可为空的 DateTime 字段更新为 null 会导致默认 DateTime 值 (0001-01-01 00:00:00.0000000)