SQLDataReader: работа с нулевыми значениями - PullRequest
4 голосов
/ 09 февраля 2010

Некоторые таблицы, с которыми я имею дело, имеют нулевые значения и выдают ошибки. До сих пор я пробовал несколько решений, чтобы справиться с нулями, но безуспешно.

Вот примеры кода из моих усилий;

If (r("datemodified").Equals(DBNull.Value)) Then
                datemodified = String.Empty
            Else
                datemodified = (r("datemodified"))
            End If

и *; 1006 *

If r.HasRows Then
                datemodified = (r("datemodified"))
            Else
                datemodified = String.Empty
            End If

и;

 If r("datemodified") = Nothing Then
                datemodified = String.Empty
            Else
                datemodified = (r("datemodified"))
            End If

и;

If r.IsDBNull("datemodified") Then
                datemodified = String.Empty
            Else
                datemodified = (r("datemodified"))

и через sql;

Select isnull(datemodified, '')

Конечным результатом является исключение IndexOutOfRangeException.

вот sql;

select datemodified, maintainedby, email, hitcount from grouping where id = @footid

пс, я выполнил запрос, и он работает нормально (то есть все столбцы существуют)

Ответы [ 2 ]

5 голосов
/ 09 февраля 2010

Для обработки нулевого значения в коде вы можете использовать метод IsDBNull:

Dim index As Integer = r.GetOrdinal("datemodified")
If r.IsDBNull(index) Then
   datemodified = String.Empty
Else
   datemodified = r(index)
End If

Чтобы обработать нулевое значение в SQL, вы должны дать полю имя, чтобы иметь возможность доступа к нему по имени в считывателе данных:

select datemodified = isnull(datemodified, '')
2 голосов
/ 09 февраля 2010

IndexOutofRangeException - это becoz столбца, к которому вы пытаетесь обратиться, не существует в наборе результатов.

Когда вы обращаетесь к порядковому номеру или столбцу через SqlDataReader, вы должны указать индекс столбца или имя столбца. В вашем сценарии необходимо указать псевдоним для возвращаемого столбца SQL.

SELECT ISNULL(datemodified, '') AS [datemodified]
...