【问题标题】:Handling DBNull data处理 DBNull 数据
【发布时间】:2023-03-09 03:25:01
【问题描述】:

我正在为一个数据行对象分配另一个数据行对象的值。 例如:

newAddress.AddrId     = frenchAddress.AddrId
newAddress.AddrLn1    = frenchAddress.AddrLn1
newAddress.AddrLn2    = frenchAddress.AddrLn2
newAddress.AddrLn3    = frenchAddress.AddrLn3
newAddress.AddrCityNm = frenchAddress.AddrCityNm
newAddress.CntryId    = frenchAddress.CntryId
newAddress.ProvId     = frenchAddress.ProvId

frenchAddress 中的某些值可以为 NULL,所以我最终得到一个异常,因为我将 DBNull 的值分配给 newAddress。处理DBNull 的最佳和最干净的方法是什么?无论如何只要在有DBNull 的地方插入NULL

使用 VB.Net。

【问题讨论】:

标签: .net vb.net sql-server-2008 dbnull


【解决方案1】:

例如,您可以将 IsDbNull 函数与 If 语句一起使用:

newAddress.AddrLn1 = If (IsDbNull(frenchAddress.AddrLn1), String.Empty, frenchAddress.AddrLine1)

【讨论】:

    【解决方案2】:

    由于这是一个类型化的DataRow(因此是具有命名属性的自动生成类型),因此已经有用于此目的的方法:

    If frenchAddress.IsAddrCityNmNull Then
        newAddress.SetAddrCityNmNull()
    Else
        newAddress.AddrCityNm = frenchAddress.AddrCityNm
    End If 
    

    如果它不是类型化的,而是标准的DataRow,您可以使用支持可空类型的SetField 方法,并且也应该处理这种情况:

    newAddress.SetField("ColumnName", frenchAddress.Field(Of String)("ColumnName"))
    

    【讨论】:

    • 好吧,我想这将是最简单的方法。虽然有更清洁的方法吗?在这个特定的函数中分配了很多值,如果我可以避免超过 10 个 If 语句,我也更喜欢。
    • @errorreplicating:这是首选方式,因为它迫使您做出决定并注意该字段可以为空。这样可以防止你出错。
    • @errorreplicating:该列是什么类型的?您是否尝试过我使用标准DataRow 的第二种方法,强类型DataRow 继承自它?
    【解决方案3】:

    这最终成为我使用的解决方案,上面两个答案之间有一点混合。它似乎工作正常:

    newAddress.AddrLn1 = If(frenchAddress.IsAddrLn1Null = True, Nothing, frenchAddress.AddrLn1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2017-11-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多