存储过程中的参数为@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