Sql 将日期变量设置为null
如果未选中chk,是否有任何方法将dtIzvrsenja的值设置为null 使用其他提到的方式进行编辑 {“可空对象必须有一个值。”}Sql 将日期变量设置为null,sql,vb.net,Sql,Vb.net,如果未选中chk,是否有任何方法将dtIzvrsenja的值设置为null 使用其他提到的方式进行编辑 {“可空对象必须有一个值。”} 使用可为空的: Dim dtIzvrsenja2 As DateTime? = Nothing dtIzvrsenja = dtIzvrsenja2 使用可为空的: Dim dtIzvrsenja2 As DateTime? = Nothing dtIzvrsenja = dtIzvrsenja2 您还
使用可为空的
:
Dim dtIzvrsenja2 As DateTime? = Nothing
dtIzvrsenja = dtIzvrsenja2
使用可为空的:
Dim dtIzvrsenja2 As DateTime? = Nothing
dtIzvrsenja = dtIzvrsenja2
您还可以使用问号(可为空)说明符,尽管这可能已经过时了
Dim nullableDateValue As New Nullable(Of Date) = Nothing
您还可以使用问号(可为空)说明符,尽管这可能已经过时了
Dim nullableDateValue As New Nullable(Of Date) = Nothing
为了支持这一点,您需要使用泛型的null(Of Date)
类型,而不仅仅是Date
(DateTime
类型的VB别名)。通常,只有引用类型变量(Class
type变量)支持空值。由于Date
是一个值类型变量(Structure
),因此它不支持nullNullable(Of T)
允许您包装任何值类型,并向该类型添加对null值的支持
在VB中(顺便说一下,在C#中也是如此),任何类型名称后面的问号都是使类型可为空的缩写。因此,Date?
相当于null(日期)
。下面是使用nullables的示例代码:
Dim dtIzvrsenja作为日期?
私有子chkDate_CheckedChanged(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理chkDate.CheckedChanged
如果Me.chkDate.Checked那么
Me.dtpDate.CustomFormat=“dd.MM.yyyy”
Me.dtpDate.Enabled=True
dtIzvrsenja=dtpdate.value
其他的
Me.dtpDate.CustomFormat=“”
Me.dtpDate.Enabled=False
dtIzvrsenja=无
如果结束
端接头
然而,Nullable(Of T)
令人困惑的是,它本身不是引用类型Nullable(Of T)
是一种值类型。因此,即使是null(日期)
变量在传统意义上也不能设置为null。Nullable(Of T)
的作用是添加一个HasValue As Boolean
属性,允许您检查值是否为null。因此,当您读取变量的值时,而不是首先检查变量是否为空
,而是需要检查它的HasValue
属性是否为真。例如:
如果dtIzvrsenja.HasValue那么
Dim dtIzvrsenja2 As Date=dtIzvrsenja.Value
' ...
如果结束
如果确实希望将日期
类型视为实际引用类型,则可以通过将变量声明为对象
来实现Object
变量始终是引用变量,因此当设置为Nothing
时,它们实际上被设置为null。当您将对象
变量设置为值类型值(例如日期
)时,它会将该值框起来。当您读取它的值并将其转换回日期时,它将经历一个称为取消装箱的过程。然而,这个装箱/拆箱过程确实增加了一些开销。另外,另一个缺点是编译时将跳过使用对象
变量的代码的类型检查。这意味着,如果您不小心,如果变量引用的对象类型与您期望的不同,则在运行时可能会出现一些异常。您可以通过声明自己的类来避免类型检查问题:
公共类日期引用
截至日期的公共财产价值
末级
或:
公共类参考(共T个)
公共财产价值
末级
然而,这似乎很愚蠢Nullable(Of T)
已经达到了这个目的,所以除非您真的需要将其作为一个引用类型,否则我建议您花点时间来熟悉使用它的标准方法
作为旁注,另一个在这方面进一步引起混淆的复杂因素是VB的Nothing
关键字并不是严格意义上的null。它只是指任何类型的deafult值。因此,对于整数
,无
等于值零。对于Date
,它意味着Date.MinValue
,等等。为了支持这一点,您需要使用泛型Nullable(Of Date)
类型,而不仅仅是Date
(用于DateTime
类型的VB别名)。通常,只有引用类型变量(Class
type变量)支持空值。由于Date
是一个值类型变量(Structure
),因此它不支持nullNullable(Of T)
允许您包装任何值类型,并向该类型添加对null值的支持
在VB中(顺便说一下,在C#中也是如此),任何类型名称后面的问号都是使类型可为空的缩写。因此,Date?
相当于null(日期)
。下面是使用nullables的示例代码:
Dim dtIzvrsenja作为日期?
私有子chkDate_CheckedChanged(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理chkDate.CheckedChanged
如果Me.chkDate.Checked那么
Me.dtpDate.CustomFormat=“dd.MM.yyyy”
Me.dtpDate.Enabled=True
dtIzvrsenja=dtpdate.value
其他的
Me.dtpDate.CustomFormat=“”
Me.dtpDate.Enabled=False
dtIzvrsenja=无
如果结束
端接头
然而,Nullable(Of T)
令人困惑的是,它本身不是引用类型Nullable(Of T)
是一种值类型。因此,即使是null(日期)
变量在传统意义上也不能设置为null。Nullable(Of T)
的作用是添加一个HasValue As Boolean
属性,允许您检查值是否为null。因此,当您读取变量的值时,而不是首先检查变量是否为空
,而是需要检查它的HasValue
属性是否为真。例如:
如果dtIzvrsenja.HasValue那么
作为Da的Dim dtIzvrsenja2