2009-11-12 2 views
2

мне нужно сделать что-то вроде:если синтаксис DBNull и значение

if isdbnull(value) or value = something then 
'do something 
else 
'do something else 
end if 

конечно я получаю сообщение об ошибке с помощью этого метода, поэтому мой вопрос, как я могу переписать его, чтобы избежать «оператор не определен для dbnull и что-то "ошибка?

ответ

5

Есть несколько подходов к этому, и которые вы используете, может зависеть от значений вы работаете. Однако, если вы хотите что-то, что улавливает все условия, то я бы это сделать:

If Value Is Nothing OrElse IsDbNull(value) Then 
    'do something 
Else 
    'do something else 
End If 

Это будет проверить, если значение нет ничего, что может произойти, без стоимости фактически быть DBNull.

Но самая важная часть этого - OrElse. OrElse - это оператор короткого замыкания, который завершает оценку условия, как только среда выполнения знает, каков будет результат. Напротив, оператор Or выполнит все условия независимо от того, что является причиной, из-за которой ваш исходный код терпит неудачу.

EDIT:

Теперь, когда я смотрю на вашем примере код еще раз, я вижу, как мой NotNull() функция может помочь вам:

Public Shared Function NotNull(Of T)(ByVal Value As T, ByVal DefaultValue As T) As T 
    If Value Is Nothing OrElse IsDBNull(Value) Then 
     Return DefaultValue 
    Else 
     Return Value 
    End If 
End Function 

Использование:

if NotNull(value, something) = something then 
'do something 
else 
'do something else 
end if 
+0

Я горячо уверен, что это именно то, о чем идет речь, но ключ является частью «OrElse» наверняка. – Jimmy

+1

Вот оно! OrElse сделал это, спасибо большое! – Iulian

+0

Несомненно, никаких проблем. Фактически теперь, когда я снова смотрю на свой оригинальный код, я вижу, как моя функция NotNull может вам помочь. –

0
value Is DBNull.Value 
+1

я все еще получаю «=» не определено для типа оператора «DBNull» и строка «что-то». – Iulian

-1

значение ничего

+1

нет, проблема в части «или значение = что-то», вот что вызывает исключение – Iulian

3

I имеют тенденцию использовать операторы OrElse, AndAlso

If IsDBnull(value) OrElse value = something Then 
    ''#do something 
Else 
    ''#do something else 
End If 

Оператор ярлыков означает, что остальные условия If не будут выполнены, если первое верно.

Edit: Стив опередил меня, пока я форматированием мой ответ :)

+0

:) Вы все еще получаете голосование за попытку, спасибо – Iulian

+0

Хех, спасибо :) Форматирование будет смертью меня ... – Cylindric

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