如何将 vb.net 中日期的空值传递给 sql 存储过程?
Posted
技术标签:
【中文标题】如何将 vb.net 中日期的空值传递给 sql 存储过程?【英文标题】:How can I pass a null value for date in vb.net to sql stored procedure? 【发布时间】:2009-03-16 06:27:03 【问题描述】:我的应用程序是带有 vb 的 asp.net。
在我的页面中,我有一个用于传递日期的文本框。如果我没有输入日期并单击提交,我必须将空值传递给存储过程。
我尝试了以下代码,例如 DBNull.Value
和 DateTime.MinValue
。在这种情况下,"#12:00:00#"
正在传递,而不是 null。我必须通过 Null。
【问题讨论】:
【参考方案1】:只需给参数赋值 DBNull.Value
[编辑]
如果您使用的是 SqlParameter(感谢 Jon),那么如果出现任何错误,您可以这样设置
parameter.Value = DBNull.Value
【讨论】:
它给出了一个转换问题。可以通过Convert.ToDateTime(DBNull.Value)解决 DBNull.Value 无法使用,因为它会生成错误“无法将对象从 DBNull.Value 转换为其他类型” 给出的代码应该没问题,如果“参数”是一个SqlParameter。【参考方案2】: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 将空整数作为 0 传递,所以我们需要处理它。
超
【讨论】:
这行不应该是pflt_dateto.SqlValue = DBNull.Value
吗?我收到错误:“DBNull 是一种类型,不能用作表达式”,没有 .Value
以上是关于如何将 vb.net 中日期的空值传递给 sql 存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
将用户定义表中的日期值传递给 SQL Server 2008 存储过程