如何在vb.net中将空日期传递给sql存储过程?

8

我的应用程序是使用vb的asp.net。

在我的页面中,我有一个文本框用于传递日期。如果我没有输入日期并单击提交,则必须向存储过程传递null值。

我尝试了以下代码,例如DBNull.ValueDateTime.MinValue。在这种情况下,而不是null,"#12:00:00#"正在传递。我必须传递Null。

2个回答

21

只需将参数赋值为 DBNull.Value。

[编辑]

如果您正在使用 SqlParameter(感谢 Jon),那么如果出现任何错误,可以像这样设置它。

parameter.Value = DBNull.Value 

它给出了一个转换问题。通过 Convert.ToDateTime(DBNull.Value) 可以解决吗? - Nandini
DBNull.Value 不能使用,因为它会生成错误信息:“无法将 DBNull.Value 强制转换为其他类型”。 - Nandini
如果“parameter”是一个SqlParameter,那么给定的代码应该是可以的。 - Jon Skeet

0
Dim pflt_dateto As SqlParameter = cmd.CreateParameter
        pflt_dateto.Direction = ParameterDirection.Input
        pflt_dateto.DbType = SqlDbType.Int
        pflt_dateto.IsNullable = True
        pflt_dateto.ParameterName = "flt_dateto"

        If String.IsNullOrEmpty(dateto) Then
            pflt_dateto.SqlValue = DBNull
        Else
            pflt_dateto.SqlValue = dateto
        End If

        cmd.Parameters.Add(pflt_dateto)

既然您设置了可空参数,错误将会消失。现在的问题是.NET将null整数作为0传递,因此我们需要处理它。

Chao


1
这一行不应该是 pflt_dateto.SqlValue = DBNull.Value 吗?没有 .Value,我收到了错误信息:“DBNull 是一种类型,不能用作表达式”。 - AllisonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接