将具有 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
我的数据库 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