设置一个空的DateTime变量
本文关键字:DateTime 变量 一个 设置 | 更新日期: 2023-09-27 18:29:51
我会声明一个空的字符串变量,如下所示:
string myString = string.Empty;
有"DateTime"变量的等价项吗?
更新:
问题是我在SQL中将此"DateTime"用作"StoredProcedure"的参数。例如:
DateTime? someDate = null;
myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
当我运行此代码时,会捕捉到一个异常,告诉我"StoredProcedure"需要一个"@SurgeryDate"参数。但我提供了它。知道为什么吗?
由于DateTime
是一种值类型,您不能将null
分配给它,但正是在这些情况下(没有值)引入了Nullable<T>
-请使用可为null的DateTime
:
DateTime? myTime = null;
否。您有两个选项:
DateTime date = DateTime.MinValue;
当你需要每隔X段时间做一件事时(因为你总是超过MinValue
),这很有效,但如果你不小心,实际上可能会导致细微的错误(比如使用一些运算符,如果你不是MinValue
,则不首先检查)。
您可以使用Nullable
:
DateTime? date = null;
这很好,避免了大多数问题,同时只引入了1或2个。
这真的取决于你想要实现什么。
您可以将DateTime变量设置为"1/1/0001 00:00:00",但变量本身不能为null。要获得此MinTime,请使用:
DateTime variableName = DateTime.MinValue;
您可能需要使用一个可以为null的日期时间。Datetime? someDate = null;
在这种情况下,你可能会发现有人使用DateTime.Max
或DateTime.Min
,但我非常怀疑你是否想这样做。它会导致边缘情况、更难读取的代码等方面的错误。
任一:
DateTime dt = new DateTime();
或
DateTime dt = default(DateTime);
如果将日期设置为
DateTime someDate = new DateTime();
"someDate"的值设置为{1/1/0001 12:00:00 AM}
您使用的方法(AddWithValue
)不会将null
值转换为数据库null。您应该使用DBNull.Value
:
myCommand.Parameters.AddWithValue(
"@SurgeryDate",
someDate == null ? DBNull.Value : (object)someDate
);
如果不是null
,这将传递someDate
值,否则传递DBNull.Value
值。在这种情况下,将向数据库传递正确的值。
选项1:使用可为null的DateTime?
选项2:使用DateTime.MinValue
就我个人而言,我更喜欢选项1。
string
是字符的序列。因此,有一个空的string
是有意义的,它只是一个空字符序列。
但是DateTime
只是一个值,所以谈论"空"的DateTime
是没有意义的。
如果你想表示"无值"的概念,它在.Net中表示为null
。如果你想将其与值类型一起使用,你需要显式地使它们可以为null。这意味着要么使用Nullable<DateTime>
,要么使用等效的DateTime?
。
DateTime
(就像所有值类型一样)也有一个默认值,它被分配给未初始化的字段,您也可以通过new DateTime()
或default(DateTime)
获得它。但您可能不想使用它,因为它表示有效日期:1.1.0001 0:00:00。
没有空日期这回事,你的意思是:
DateTime? myDateTime = null;
.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);
}
}
这将适用于空日期时间参数
SearchUsingDate(DateTime? StartDate, DateTime? EndDate){
DateTime LastDate;
if (EndDate != null)
{
LastDate = (DateTime)EndDate;
LastDate = LastDate.AddDays(1);
EndDate = LastDate;
}
}