我会声明一个像这样的空字符串变量:
string myString = string.Empty;
是否有'DateTime'变量的等价物?
更新:
问题是我使用这个'DateTime'作为SQL中'StoredProcedure'的参数。 E.g:
DateTime? someDate = null;
myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
当我运行此代码时,会捕获一个异常,告诉我'StoredProcedure'需要'@SurgeryDate'参数。 但我提供了它。 知道为什么吗?
答案 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.Max
或DateTime.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;
}
}