Asp.net 如何使DateTime的值为NULL?
在我的SQL数据库中,我将Asp.net 如何使DateTime的值为NULL?,asp.net,.net,vb.net,visual-studio,Asp.net,.net,Vb.net,Visual Studio,在我的SQL数据库中,我将DpsDate和AdmDate声明为DATE,并将它们设置为允许空值。当我运行应用程序并将这些列留空时,会出现以下错误: 无法将参数值从字符串转换为日期时间 这就是我有点困惑的地方,因为我已经将它们设置为允许null,所以数据库不应该接受no值吗?如果我将两个日期都设置为“01/01/1900”,则应用程序可以运行。我尝试将它们设置为“00/00/0000”,但得到了相同的错误 以下是我所拥有的: If tbNotifyDate.Text = "" Th
DpsDate
和AdmDate
声明为DATE
,并将它们设置为允许空值。当我运行应用程序并将这些列留空时,会出现以下错误:
无法将参数值从字符串转换为日期时间
这就是我有点困惑的地方,因为我已经将它们设置为允许null,所以数据库不应该接受no值吗?如果我将两个日期都设置为“01/01/1900”,则应用程序可以运行。我尝试将它们设置为“00/00/0000”,但得到了相同的错误
以下是我所拥有的:
If tbNotifyDate.Text = "" Then
cmd.Parameters.Add("@DpsDate", SqlDbType.Date, 50).Value = "01/01/1900"
Else
cmd.Parameters.Add("@DpsDate", SqlDbType.Date, 50).Value = tbNotifyDate.Text
End If
If tbAdmDate.Text = "" Then
cmd.Parameters.Add("@AdmDate", SqlDbType.Date, 50).Value = "01/01/1900"
Else
cmd.Parameters.Add("@AdmDate", SqlDbType.Date, 50).Value = tbAdmDate.Text
End If
您需要在ADO.NET中使用
DBNull.Value
来表示NULL
。在ADO.NET之上构建的表适配器和实体框架等东西可以支持可空值类型,因此可以使用Nothing
来表示NULL
,但ADO.NET本身早于可空值类型,因此Microsoft不得不发明一种专门用于表示NULL
的类型
我建议使用If
操作符使代码更简洁:
Dim value As Date
cmd.Parameters.Add("@AdmDate", SqlDbType.Date).Value = If(Date.TryParse(tbAdmDate.Text, value),
value,
CObj(DBNull.Value))
之所以需要CObj
,是因为If
的两个可能结果必须是相同的类型,Date
和DBNull
不是相同的类型。通过将一个可能的结果转换为typeObject
,它们都被解释为typeObject
,编译器很高兴
请注意,正如我所写的示例,如果
文本框
包含任何不是日期
有效表示形式的内容,则这将保存NULL
。您可以在特定情况下使用任何适当的验证,或者,如果您已经验证,只需检查一个空的文本框
,并使用CDate
在ADO.NET中使用DBNull.Value
表示NULL
,而不考虑数据类型。为什么要将date
参数的大小指定为50?使用实际大小(零)或不设置大小。您只需要为可变宽度数据类型指定大小,例如varchar
。示例中经常使用50,因为这是varchar
等的默认值,但将其用于date
字段会产生误导。可能重复