Я хочу инициализировать класс данными из MySql db. Некоторые поля могут быть пустым:VB.NET 2010 и MySql - обработка DB NULL для ленивых людей
Dim dr As MySqlDataReader = ...
Dim item As New Item(dr.GetInt16(0), dr.GetString(1), dr.GetString(2))
Предположим, что последние два поля могут быть NULL в БД, так что вызов GetString на этом поле вызывает исключение.
Я мог бы, конечно, написать код для проверки на значения NULL, прежде чем я каждое поле:
dim field1 as String
if (dr.IsDbNull(1))
field1 = Nothing ' or even ""
else
field1 = dr.GetString(1)
Но если у вас есть много полей, это «если» кошмар.
С этой целью я переписал функцию IIf VB, чтобы сделать его более напечатанным, таким образом, чтобы избежать слепков:
Namespace Util
Public Shared Function IIf(Of T)(ByVal condition As Boolean, ByVal iftrue As T, ByVal iffalse As T) As T
If condition Then Return iftrue Else Return iffalse
End Function
Так что я мог бы написать что-то вроде:
Dim item As New Item(
dr.GetInt16(0),
Util.IIf(dr.IsDbNull(1), "", dr.GetString(1),
Util.IIf(dr.IsDbNull(2), "", dr.GetString(2))
Типизированных IIf хорошо работает в других случаях, но, к сожалению, этого не происходит, потому что является обычной функцией, а не ключевым словом языка, каждый параметр inpout оценивается во время ca ll, а когда поле NULL, исключение возбуждается.
Можете ли вы придумать элегантное, если угодно, решение?
Преобразование типов в порядке: добавить реализации 'DbDataReader', сделать это внутренне, когда вы вызываете строго типизированные функции, такие как' GetString'. –