.net 处理DBNull数据

.net 处理DBNull数据,.net,vb.net,sql-server-2008,dbnull,.net,Vb.net,Sql Server 2008,Dbnull,我正在为一个datarow对象分配另一个datarow对象的值。 例如: newAddress.AddrId = frenchAddress.AddrId newAddress.AddrLn1 = frenchAddress.AddrLn1 newAddress.AddrLn2 = frenchAddress.AddrLn2 newAddress.AddrLn3 = frenchAddress.AddrLn3 newAddress.AddrCityNm = french

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

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
newAddress.AddrLn1 = If (IsDbNull(frenchAddress.AddrLn1), String.Empty, frenchAddress.AddrLine1)
frenchAddress
中的一些值可能为NULL,因此我最终得到了一个异常,因为我正在为
newAddress
赋值
DBNull
。处理
DBNull
的最佳和最干净的方法是什么?在有一个
DBNull
的地方插入
NULL


使用VB.Net。

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

If frenchAddress.IsAddrCityNmNull Then
    newAddress.SetAddrCityNmNull()
Else
    newAddress.AddrCityNm = frenchAddress.AddrCityNm
End If 
如果它不是类型化的,而是标准的
DataRow
,则可以使用
SetField
方法,该方法支持可为空的类型,并且还应处理这种情况:

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

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

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
newAddress.AddrLn1 = If (IsDbNull(frenchAddress.AddrLn1), String.Empty, frenchAddress.AddrLine1)

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

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

什么类型的法语地址可能重复?是键入的数据行吗?@TimSchmelter是的。好吧,酷,我想这是最简单的方法。但是有没有更干净的方法呢?在这个特殊的函数中分配了很多值,如果我能避免超过10个if语句,我也更喜欢。@errorreplicating:这是首选的方法,因为它迫使您做出决定,并注意到此字段可以为空。这样可以防止您出错。@errorreplicating:该列是什么类型的?您是否尝试过我的第二种方法,它使用标准的
DataRow
,强类型的
DataRow
继承自它?