设置一个空的DateTime变量

时间:2012-04-02 19:47:30

标签: c# sql datetime

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

    string myString = string.Empty;

是否有'DateTime'变量的等价物?

更新:

问题是我使用这个'DateTime'作为SQL中'StoredProcedure'的参数。 E.g:

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

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

12 个答案:

答案 0 :(得分:73)

由于DateTime是值类型,因此您无法为其分配null,但正是针对这些情况(缺少值)引入了Nullable<T> - 使用可为空的DateTime而不是:

DateTime? myTime = null;

答案 1 :(得分:27)

没有。您有两个选择:

DateTime date = DateTime.MinValue;

当你需要每隔X个时间做一些事情(因为你总是会超过MinValue)时这会有效但是实际上可能会导致细微的错误(例如使用一些操作员,如果你不是MinValue)如果你不小心。

您可以使用Nullable

DateTime? date = null;

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

这实际上取决于你想要达到的目标。

答案 2 :(得分:11)

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

DateTime variableName = DateTime.MinValue;

答案 3 :(得分:6)

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

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

答案 4 :(得分:5)

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

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

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

答案 5 :(得分:4)

或者:

DateTime dt = new DateTime();

DateTime dt = default(DateTime);

答案 6 :(得分:4)

如果您将日期设置为

DateTime dNewDate = new DateTime();

该值设置为{1/1/0001 12:00:00 AM}

答案 7 :(得分:3)

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

选项2:使用DateTime.MinValue

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

答案 8 :(得分:3)

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

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

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

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

答案 9 :(得分:1)

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

DateTime? myDateTime = null;

答案 10 :(得分:0)

.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);
        }
    }

答案 11 :(得分:0)

这将适用于null日期时间参数

。 。

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