如何在VB中考虑NOTHING.Net在SQL Server中通过NULLABLE变量设置为NULL



存储过程中的参数为@classid INT = NULL, @streamid INT = NULL。现在在VB中。我已经声明了两个变量Dim classid As Int32?, streamid As Int32?作为NULLABLE。如果没有值传递给这些参数,则传递NOTHING

NOTHING是否被认为是SQL Server中的NULL,或者我必须通过DBNULL.Value显式地从代码中传递参数给SP?

因为当我直接从SQL Server执行SP时,它会显示我的结果,但如果我从应用程序调用SP,那么它会显示我没有记录。

传递代码中的参数:

cmd.SelectCommand.Parameters.AddWithValue("@class", classid.GetValueOrDefault())
cmd.SelectCommand.Parameters.AddWithValue("@stream", streamid.GetValueOrDefault())

我像上面那样传递两个参数。

文档说您应该使用DBNull.Value:

对象

要添加的值。使用[DBNull。Value而不是null,表示空值。

很可能Nothing(c#中的null)也可以工作,但根据文档,它不被官方支持。


旁注:你的代码中有一个bug:

cmd.SelectCommand.Parameters.AddWithValue("@class", classid.GetValueOrDefault ())

在这里,您不传递Nothing,而是传递0,因为GetValueOrDefault()Nothing转换为底层数据类型的默认值(Int32?的情况下为0)。

传递Int32或Nothing,使用

cmd.SelectCommand.Parameters.AddWithValue("@class", classid)

传递Int32或DBNull。值,使用

cmd.SelectCommand.Parameters.AddWithValue("@class", If(CObj(classid), DBNull.Value))

(Option Strict On需要CObj来允许If推断公共返回类型)

1:存储过程中声明的参数

@classid INT = NULL, 
@streamid INT = NULL

但是从传递参数。

@class
@stream

必须有与相同的参数在两边保持它的工作

2:参数应该声明为

@classid INT NULL, 
@streamid INT NULL

相关内容

  • 没有找到相关文章

最新更新