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

Compare values with 3 states Y/N as String or DbNull

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

我想确保显示此信息的 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") 填充了最新数据,然后根据序列号 SEQ.

DataGridView 列中的当前值进行比较

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

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

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

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

TryCast 运算符可以在这里帮助您。您可以尝试转换为 String 类型,包含 DBNull.Value 的字段将简单地 return 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