Подтвердить что ты не робот

Как проверить, является ли datareader нулевым или пустым

У меня есть datareader, который возвращает lsit записей из базы данных sql-сервера. У меня есть поле в базе данных под названием "Дополнительно". Это поле составляет 50% от времени, пустого или нулевого.

Я пытаюсь написать код, который проверяет, является ли это поле isnull. Логика этого: Если поле "Дополнительно" содержит текст, тогда отображение информации в противном случае скрыть поле.

Я пробовал:

if (myReader["Additional"] != null)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}

Приведенный выше код дает мне эту ошибку:

Сведения об исключении: System.IndexOutOfRangeException: Дополнительные

Любая помощь будет принята с благодарностью...


См. также:

Проверить имя столбца в объекте SqlDataReader

4b9b3361

Ответ 1

if (myReader["Additional"] != DBNull.Value)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}

Ответ 2

Я не использовал DataReaders для 3+ лет, поэтому я хотел подтвердить свою память и нашел это. В любом случае, для тех, кто на этом посту, как и я, и хочет метод для проверки IsDBNull с использованием имени столбца вместо порядкового номера, и вы используете VS 2008+ (и, как мне кажется,.NET 3.5), вы можете написать расширение чтобы вы могли передать имя столбца в:

public static class DataReaderExtensions
{
    public static bool IsDBNull( this IDataReader dataReader, string columnName )
    {
        return dataReader[columnName] == DBNull.Value;
    }
}

Кевин

Ответ 3

if (myReader.HasRows) //The key Word is **.HasRows**

{

    ltlAdditional.Text = "Contains data";

}

else

{   

    ltlAdditional.Text = "Is null Or Empty";

}

Ответ 4

Это правильное и проверенное решение

if (myReader.Read())
{

    ltlAdditional.Text = "Contains data";
}
else
{   
    ltlAdditional.Text = "Is null";
}

Ответ 5

Я также использую OleDbDataReader.IsDBNull()

if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }

Ответ 6

Прежде всего, вы, вероятно, захотите проверить DBNull не обычный Null.

Или вы можете посмотреть на метод IsDBNull

Ответ 7

В дополнение к приведенным предложениям вы можете сделать это прямо из своего запроса, например:

SELECT ISNULL([Additional], -1) AS [Additional]

Таким образом, вы можете записать условие, чтобы проверить, является ли значение поля < 0 или >= 0.

Ответ 8

@Joe Philllips

SQlDataReader.IsDBNull(int index) требует порядкового номера столбца. Есть ли способ проверить нули, используя имя столбца, а не его порядковый номер?

Ответ 9

AMG - Извините, у меня был светлый момент. Поле "Дополнительно" было добавлено в базу данных после того, как я изначально разработал базу данных.

Я обновил весь свой код, чтобы использовать это новое поле, однако я забыл обновить фактический код datareader, который делал вызов, чтобы выбрать поля базы данных, поэтому он не вызывал "Дополнительные"

Ответ 10

Я также сталкиваюсь с такой проблемой, но мой, я использую DbDataReader в качестве своего общего читателя (для SQL, Oracle, OleDb и т.д.). Если использовать DataTable, DataTable имеет этот метод:

DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");

используя это, я могу определить, существует ли этот столбец в наборе результатов, который имеет мой запрос. Я также смотрю, имеет ли DbDataReader эту возможность.