设置一个空的DateTime变量

pha*_*unk 48 c# sql datetime

我会声明一个空的String变量,如下所示:

    string myString = string.Empty;
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

    DateTime? someDate = null;
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
Run Code Online (Sandbox Code Playgroud)

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

Bro*_*ass 76

由于DateTime是一个值类型,你无法分配null给它,但Nullable<T>确实引入了这些情况(没有值)- 使用可以为空的DateTime:

DateTime? myTime = null;
Run Code Online (Sandbox Code Playgroud)


Sha*_*ish 28

不,你有两个选择:

DateTime date = DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)

当你需要每X个时间做一些事情时(因为你总是会结束MinValue),这可以工作但实际上可能会导致细微的错误(例如使用一些操作员,MinValue如果你不小心的话,先不检查你是不是).

你可以使用Nullable:

DateTime? date = null;
Run Code Online (Sandbox Code Playgroud)

这很好,避免大多数问题,只引入1或2.

这实际上取决于你想要实现的目标.


小智 11

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

DateTime variableName = DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)


Ser*_*rvy 6

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

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


Chr*_*ani 6

如果您将日期设置为

DateTime someDate = new DateTime();
Run Code Online (Sandbox Code Playgroud)

“someDate”的值设置为 {1/1/0001 12:00:00 AM}


Ale*_*lex 5

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

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate
);
Run Code Online (Sandbox Code Playgroud)

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


ili*_*ode 5

要么:

DateTime dt = new DateTime();
Run Code Online (Sandbox Code Playgroud)

要么

DateTime dt = default(DateTime);
Run Code Online (Sandbox Code Playgroud)