Я выполняю запрос в vb.net и хочу проверить, является ли столбец нулевым. я пытался:

If reader.GetString(2) IsNot Nothing Then

If IsDBNull(reader.GetString(2)) Then

If reader.GetString(2) IsNot NULL Then

If NOT reader.GetString(2) IS Nothing Then

If NOT reader.GetString(2) IS NULL Then

Но все они возвращаются:

Data is Null. This method or property cannot be called on Null values.

Когда я запускаю свой запрос в MySQL, в столбцах отображается NULL

0
charlie 13 Май 2016 в 23:03

2 ответа

Лучший ответ

Проблема заключается в методе GetString, который внутренне преобразует значение вашей строки в строку. Если значение строки равно нулю, вы получите исключение.

Исправление использует тернарный оператор VB.NET

Dim result = IF(reader.IsDbNull(2), "", reader.GetString(2))

Или если вы не хотите назначать значение по умолчанию, когда третье поле имеет значение null, вы можете просто написать

if Not reader.IsDbNull(2) Then
   .......
End if
4
Steve 13 Май 2016 в 20:17

Для справки в будущем:

У вас есть несколько способов проверить, является ли значение db нулевым или нет.
Примеры здесь с полным пространством имен.

Dim reader As System.Data.SqlClient.SqlDataReader
Dim fieldIndex As Integer = 0

' reader(fieldIndex) is equivalent to reader.Item(fieldIndex)
Dim fieldValue As Object = reader.Item(fieldIndex)

Dim isFieldValueNull As Boolean

' Namespace: System.Data.SqlClient; Class: SqlDataReader
isFieldValueNull = reader.IsDBNull(fieldIndex)

' Namespace: Microsoft.VisualBasic; Module: Information
isFieldValueNull = Microsoft.VisualBasic.IsDBNull(fieldValue)

' Namespace: System; Class: Convert
isFieldValueNull = System.Convert.IsDBNull(fieldValue)

' Namespace: System; Class: DBNull
isFieldValueNull = System.DBNull.Value.Equals(fieldValue)

Примечание: DBNull.Value всегда имеет экземпляр DBNull, поэтому он никогда не будет Nothing!

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

Dim isFieldValueNotNull As Boolean

isFieldValueNotNull = Not reader.IsDBNull(fieldIndex)
isFieldValueNotNull = Not Microsoft.VisualBasic.IsDBNull(fieldValue)
isFieldValueNotNull = Not System.Convert.IsDBNull(fieldValue)
isFieldValueNotNull = Not System.DBNull.Value.Equals(fieldValue)
0
Gabor 14 Май 2016 в 16:53