DbNull.Value存储过程参数?

时间:2008-11-18 16:51:17

标签: asp.net web-services

我有一个Web服务,它有一个泛型函数,可以从存储过程的结果中返回一个数据集......某些存储过程有可选参数,其中值可以为null但不是所有时间。

无论如何我试图传递一个值为DBNull.Value

的参数

我得到了这个生成XML文档时出错。这样做时从Web服务返回

如果我把这个参数保留下来它可以正常工作......但是我真的想知道为什么DBNull.Value会导致这个问题。

2 个答案:

答案 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