2012-04-02 86 views
31

我将宣布一个空字符串像这样的变量:设置空的DateTime变量

string myString = string.Empty; 

是否有一个“日期时间”变量等效?

更新:

的问题是我用这个“日期时间”作为一个参数在SQL中的“StoredProcedure的”。 E.g:

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

当我运行此代码的异常被逮住告诉我“StoredProcedure的”预期“@SurgeryDate”参数。 但我提供了它。 任何想法,为什么?

回答

63

由于DateTime是不能分配null给它的值类型,但正是对于这些情况(没有值)Nullable<T>介绍 - 使用一个可以为空DateTime来代替:

DateTime? myTime = null; 
+0

此“可空”DateTime是否适合D类型的SQL数据库列ateTime? 我对此很陌生。 – phadaphunk 2012-04-02 19:50:15

+1

是 - 如果列允许插入空值 – BrokenGlass 2012-04-02 19:50:56

+0

@PhaDaPhunk大多数数据库都会设置值是否可以设置为空。 – Servy 2012-04-02 19:51:16

5

您可能需要使用可空的日期时间。 Datetime? someDate = null;

在这种情况下,您可能会发现使用DateTime.MaxDateTime.Min的人的实例,但我非常怀疑您希望这样做。这导致与优势情况下的错误,代码是难以阅读等

1

有一个空的日期本身没有这样的事,你的意思是这样的:

DateTime? myDateTime = null; 
20

号你有2个选项:

DateTime date = DateTime.MinValue; 

这工作时,你需要做的事情的时候(因为你永远是在MinValue)每X量,但实际上可能造成细微的错误(比如使用一些运营商W/O,如果你是第一次检查不是MinValue)如果你不小心UL认证。

你也可以使用Nullable

DateTime? date = null; 

这是很好的,虽然只引入1或2

这真的取决于你想要达到的目的可以避免大多数问题。

9

您可以将DateTime变量设置为'1/1/0001 00:00:00',但变量本身不能为空。要获得此MinTime使用:

DateTime variableName = DateTime.MinValue; 
1

选项1:使用可空的DateTime?

选项2:使用DateTime.MinValue

就个人而言,我宁愿选择1

3

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

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

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

DateTime(就像所有的值类型)也有一个默认值,已分配未初始化的字段,并且您还可以通过new DateTime()default(DateTime)得到它。但你可能不想使用它,因为它代表有效日期:1.1.0001 0:00:00。

5

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

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

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

+0

好的我喜欢这种方法,但是能否请你解释最后一行..? – phadaphunk 2012-04-02 20:53:12

+0

@PhaDaPhunk:这是更普遍的情况 - 你有一个变量'someDate',其类型为'可空'。如果它的值是'null',我将'DBNull.Value'传递给'AddWithValue'方法。否则,我会传递价值本身。 – Alex 2012-04-02 21:13:36

+0

谢谢我不知道我们可以做到这一点! – phadaphunk 2012-04-02 21:15:47

4

或者:

DateTime dt = new DateTime(); 

DateTime dt = default(DateTime); 
1

如果您设置的值设置为{1/1/0001 12:00:00的日期

DateTime dNewDate = new DateTime(); 

AM}