设置一个空的 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.Max
或DateTime.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
使用 C# DateTime 将 SQL 日期时间设置为最小值
将可为空的 DateTime 字段更新为 null 会导致默认 DateTime 值 (0001-01-01 00:00:00.0000000)