比较具有3个状态Y / N的值作为String或DbNull

时间:2019-01-24 10:37:35

标签: vb.net operators dbnull

我有一个数据库表,其中的列DECISION可以具有以下值:'Y''N'(null)。可以有多个人通过应用程序更新此数据库表中的值。

我想确保显示此信息的DataGridView定期为所有用户保持最新状态。

我有一个执行以下操作的后台线程:

For Each new_row As DataRow In dsData.Tables("Progress").Rows
    For Each cur_row As DataRow In dsData.Tables("List").Rows
        If new_row("SEQ") = cur_row("SEQ") And new_row("DECISION") <> cur_row("DECISION") Then
            cur_row("DECISION") = new_row("DECISION")
        End If
    Next
Next

基本上dsData.Tables("Progress")会填充最新数据,然后根据序列号DataGridViewSEQ列中的当前值进行比较。

我想发生的是,如果它们不同,则cur_row的值将更改为new_row的值。

但是,它失败了,因为有时会尝试将字符串'N''Y'(null)进行比较。

解决此问题的最佳方法是什么?

我确实想比较并更新任何(null),因为它是此系统中的真实状态。

1 个答案:

答案 0 :(得分:0)

TryCast运算符可以在这里为您提供帮助。您可以尝试将类型转换为String,而包含DBNull.Value的字段将仅返回Nothing

Dim cur_val = TryCast(cur_row("DECISION"), String)
Dim new_val = TryCast(new_row("DECISION"), String)

If new_val IsNot Nothing AndAlso cur_val <> new_val Then
    cur_row("DECISION") = new_val
End If