2013-07-09 2 views

ответ

1

Ваш код не будет работать, так как myDataRow("column1") не Nothing но DBNull.Value.

Я бы использовал строго типизированный метод расширения Field, который также поддерживает типы с нулевым значением;

Dim string1 = If(myDataRow.Field(Of String)("column1"), "") 

Если вы хотите использовать старый способ:

Dim string1 = If(myDataRow.IsNull("column1"), "", DirectCast(myDataRow("column1"), String)) 
+0

Это 'DataRow.Field' в VS2010? – CJ7

+0

Нужна ли 'DirectCast'? Я думал, что значения DataRow' типизированы в соответствии с их типом источника базы данных? – CJ7

+0

@ CJ7: Да, он доступен в .NET 4. Возможно, вы обновили этот проект. Затем вам нужно добавить 'System.Data.DataSetExtensions.dll' ссылки на проект. 'DirectCast' необходим, поскольку' myDataRow ("column1") 'имеет тип' Object'. Если вам не нужно, вы должны немедленно установить 'OPTION STRICT'' на ';') –

0

Я рекомендую создать такую ​​функцию:

Shared Function DBNull2Space(ByVal objValue As Object) As Object 

    If IsDBNull(objValue) Then 
     DBNull2Space = Space(0) 
    Else 
     DBNull2Space = objValue 
    End If 

End Function 

Это вызов функции:

Dim strTest as String = DBNull2Space(myDataRow("column1")) 
+0

Эта функция полезна только для типов String, поэтому вы может также возвратить 'String', а не' Object'. Ваш вызов функции завершится неудачно с опцией Strict On, поскольку это означает, что это еще одна причина для ее изменения. –

+0

Спасибо! Никогда не замечайте этого, так как я создал эту функцию в 2004 и поместил его в мою библиотеку! :) Я думаю, что я заявляю это так, потому что я simp изменена функция Space2DBNull, которая должна вернуть объект (DBNull.Value или objValue). – tezzo

0

Попробуйте это.

Dim string1 As String = If(IsDBNull(myDataRow.Item("column1")), "",myDataRow.Item("column1")) 
+0

Вы должны использовать оператор IF вместо функции IIF, поскольку он обеспечивает короткое замыкание и тип безопасности –

+0

@MattWilko .. thanx, это просто плохая привычка .. – matzone

+0

Является ли 'IsDBNull (myDataRow (" column1 ")' предпочтительнее 'myDataRow (« column1 »). IsNull'? – CJ7

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