我有一个Web服务,它有一个泛型函数,可以从存储过程的结果中返回一个数据集......某些存储过程有可选参数,其中值可以为null但不是所有时间。
无论如何我试图传递一个值为DBNull.Value
的参数我得到了这个生成XML文档时出错。这样做时从Web服务返回
如果我把这个参数保留下来它可以正常工作......但是我真的想知道为什么DBNull.Value会导致这个问题。
答案 0 :(得分:1)
我相信这是因为System.DBNull值在数据库表中是空值,但过程中的空字段实际上等于null / nothing关键字。不是数据库null值。我不确定引擎盖下的技术差异。
但是在你的存储过程中你可以将它默认为null而不是像你已经完成的那样发送值,或者我相信如果你发送null / nothing它也会起作用。
答案 1 :(得分:0)
您可以在SqlParemeter中传递NULL值,但必须进行某种类型转换以确保传递正确的空值。
在这个例子中,有一个名为“Count”的参数是一个整数,它被传递为null:
Using dtResult as New DataTable
Using cn as SqlConnection = New SqlConnection ("ConnectionString")
Using sqlcmd as SqlCommand - New SqlCommand("StoredProceName", cn) with {.CommandType=CommandType.StoredProcedure}
Dim sp As SqlParameter
sp = sqlcmd.Parameters.Add("@Count", SqlDbType.Int)
sp.value = CType(Nothing, SqlTypes.SqlInt32)
Using myDR as SqlDataReader = sqlcmd.ExecuteReader
dtResult.Load(myDR)
end using
return dtResult
End Using ' For sqlcmd
cn.Close() ' Close the connection
end using ' For cn
end using ' For dtResult