【问题标题】:DbNull.Value Stored Procedure Parameter?DbNull.Value 存储过程参数?
【发布时间】:2023-04-09 00:43:01
【问题描述】:

我有一个 Web 服务,它有一个通用函数,可以从存储过程的结果中返回一个数据集...一些存储过程具有可选参数,其中的值可以为空,但并非一直为空。

无论如何我都试图传入一个值为 DBNull.Value 的参数

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

如果我不考虑这个参数,它可以正常工作......但真的很想知道为什么 DBNull.Value 会导致这个问题。

【问题讨论】:

    标签: asp.net web-services


    【解决方案1】:

    我相信这是因为 System.DBNull 值在数据库表中为空,但过程中的空字段实际上等同于空/无关键字。不是数据库空值。我不确定引擎盖下的技术差异。

    但是在您的存储过程中,您可以将其默认为 null 并且不发送您已经完成的值,或者我相信如果您发送 null/nothing 它也可以工作。

    【讨论】:

      【解决方案2】:

      您可以在 SqlParemeter 中传递 NULL 值,但您必须进行一些类型转换以确保传递正确的 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
      

      【讨论】:

        猜你喜欢
        • 2017-11-22
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-07
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多