SqlReader and NULL value

tasha klemer
Дата: 06.05.2014 18:38:06
Доброго времени суток уважаемые форумчане...
Не могу справиться с проблемой проверки записей выдаваемых через SqlReader и являющиеся NULL значением.
проверку делаю таким образом
If reader1.GetString(8) Is DBNull.Value Then
                    Ex_Wb1.Cells(i, 9).value() = 0
                Else
                    Ex_Wb1.Cells(i, 9).value() = reader1.GetString(8)
                End If


но оно не работает для таких записей т.к. это не строка и не число а тип Null ...как правильно обратиться по типу к таким строкам, т.е. обратиться к 8 полю селекта???
tasha klemer
Дата: 06.05.2014 21:06:21
 If IsDBNull(reader1.GetValue(8)) = True Then
                    Ex_Wb1.Cells(i, 9).value() = ""
                Else
                    Ex_Wb1.Cells(i, 9).value() = reader1.GetString(8)
                End If


Модератор: Тема перенесена из форума "Visual Basic".
Pallaris
Дата: 06.05.2014 21:48:54
tasha klemer
 If IsDBNull(reader1.GetValue(8)) = True Then
                    Ex_Wb1.Cells(i, 9).value() = ""
                Else
                    Ex_Wb1.Cells(i, 9).value() = reader1.GetString(8)
                End If



Ну тогда уж проще
[SRC VB]
Ex_Wb1.Cells(i, 9).value() = reader1.GetValue(8).ToString()
[/SRC]
bazile
Дата: 06.05.2014 21:59:14
tasha klemer, а я бы написал extension метод чтобы было легко обращаться к колонке по имени и указывать значение по умолчанию для NULL значения:
Public Module DataReaderExtensions

    <Extension()> _
    Public Function GetString(ByVal reader As DbDataReader, ByVal columnName As String, Optional ByVal defValue As String = Nothing) As String

        Dim columnIdx As Integer = reader.GetOrdinal(columnName)
        Return IIf(reader.IsDBNull(columnIdx), defValue, reader.GetString(columnIdx))

    End Function

End Module

Использование:
Ex_Wb1.Cells(i, 9).Value = reader1.GetString("ИмяКолонки", "")