Сравните значения с 3 состояниями Y / N как String или DbNull - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица базы данных со столбцом 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") заполняется последними данными и затем сравнивается с текущими значениями в столбце DataGridView на основе порядкового номера SEQ.

Я хочу, чтобы, если они отличаются, значение cur_row меняется на new_row.

Однако он падает, потому что иногда он пытается сравнить строку 'N' или 'Y' с (null), что невозможно сделать.

Какой лучший способ обойти это?

Я хочу сравнить и обновить любой (null), поскольку он является подлинным состоянием в этой системе.

1 Ответ

0 голосов
/ 24 января 2019

Оператор 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
...