2012-03-22 3 views
0

Я пытаюсь обрабатывать исключение DBNull при чтении данных из базы данных. Это мой код:Обработка исключения DBNull в VB.net

... 
Dim SQLRDAs SqlDataReader 
... 
val1= GetStringFromDB(Trim(SQLRD("Name"))) 
val2= GetStringFromDB(Trim(SQLRD("Level"))) 
val2= GetStringFromDB(Trim(SQLRD("blahblah"))) 
... 
Public Function GetStringFromDB(ByVal inputValue) As String 
    Dim outputValue As String 

    If IsDBNull(inputValue) Then 
     outputValue = "null" 
    Else 
     outputValue = inputValue 
    End If 

    Return outputValue 
End Function 

Но все-таки я получаю Conversion from type 'DBNull' to type 'String' is not valid. ошибку. Что не так?

+0

Вы перевернули тест на IsDBNull – Steve

+0

Даже я пытался знач1 = IIF (IsDBNull (DS ("blahblah")), "нуль", дифферента (DS ("blahblah"))) и я получаю ту же ошибку , – Maysam

ответ

1

IsDBNull проверяет, отсутствует ли значение. Это не эквивалентно Nothing или String.Empty. Вы уверены, что ваш inputValue содержит DBNull.Value?

я изменить свой код таким образом:

If String.IsNullOrEmpty(inputValue) OrElse IsDBNull(inputValue) Then 
    outputValue = "null" 

Также обратите внимание, что вы не указали тип InputValue, в моем ответе я полагаю As String

+2

InputValue не должен указываться с опцией Strict Off. Однако это может быть DbNull, и в этом случае Trim терпит неудачу в первую очередь. – Alex

+0

Не проблема. Проблема заключается в Trim. – MarkJ

2

Это выглядит мне, чем простая ошибка транспонирования. Вы проверяете на Not IsDbNull(..), но действуйте как значение будет dbnull!

Public Function GetStringFromDB(ByVal inputValue) As String 
    Dim outputValue As String 

    If Not IsDBNull(inputValue) Then 
     outputValue = inputValue 
    Else 
     outputValue = "null" 
    End If 

    Return outputValue 
End Function 

Это должно сделать трюк!

+0

жаль, что это было если IsDBNull (inputValue) Тогда изначально. он не работает – Maysam

2

У вас смешанное состояние.

Изменить

If Not IsDBNull(inputValue) Then 
    outputValue = "null" 
' .... 

Для

If IsDBNull(inputValue) Then 
    outputValue = "null" 
' .... 

Редактировать: Trim выполняется до вашего DBNull-проверки. Поэтому я предполагаю, что это вызывает ваше исключение. Измените свой код на:

GetStringFromDB(SQLRD("Name")).Trim 
+0

извините, что если IsDBNull (inputValue), то изначально. он не работает – Maysam

+1

@Maysam: Отредактировал мой ответ. –

+0

@Alex btw, Спасибо за ваш ответ. – Maysam

2

кажется мне, как если вы попробуете Trim a DBNull значение.

Либо сделать GetStringFromDB(SQLRD("Name")).Trim() или внутри GetStringFromDB

Edit: я бы обернуть такие вещи в расширение, делает его проще в использовании и не загромождать код.

<Runtime.CompilerServices.Extension()> 
    Public Function ReadString(ByVal this As SqlDataReader, ByVal index As Integer) As String 
    Return If(Convert.IsDBNull(this.Item(index)), String.Empty, DirectCast(this.Item(index), String)) 
    End Function 

    <Runtime.CompilerServices.Extension()> 
    Public Function ReadString(ByVal this As SqlDataReader, ByVal columnName As String) As String 
     Return If(Convert.IsDBNull(this.Item(columnName)), String.Empty, DirectCast(this.Item(columnName), String)) 
    End Function 
+0

Да, я был моей ошибкой Trim DBNull. – Maysam

Смежные вопросы