как проверить, является ли datareader нулевым или пустым - PullRequest
44 голосов
/ 18 апреля 2009

У меня есть устройство чтения данных, которое возвращает список записей из базы данных сервера SQL. У меня есть поле в базе данных под названием «Дополнительно». Это поле в 50% случаев пустое или пустое.

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

Я пробовал:

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

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

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

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


Смотрите также:

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

Ответы [ 12 ]

66 голосов
/ 18 апреля 2009
if (myReader["Additional"] != DBNull.Value)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}
11 голосов
/ 23 августа 2013
if (myReader.HasRows) //The key Word is **.HasRows**

{

    ltlAdditional.Text = "Contains data";

}

else

{   

    ltlAdditional.Text = "Is null Or Empty";

}
10 голосов
/ 21 октября 2010

Я не пользовался 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;
    }
}

Kevin

8 голосов
/ 09 марта 2011

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

if (myReader.Read())
{

    ltlAdditional.Text = "Contains data";
}
else
{   
    ltlAdditional.Text = "Is null";
}
5 голосов
/ 27 ноября 2011

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

if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
2 голосов
/ 18 апреля 2009

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

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

1 голос
/ 26 июня 2010

@ Джо Филлипс

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

1 голос
/ 18 апреля 2009

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

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

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

0 голосов
/ 13 февраля 2019

Попробуйте этот более простой эквивалентный синтаксис:

ltlAdditional.Text = (myReader["Additional"] == DBNull.Value) ? "is null" : "contains data";
0 голосов
/ 02 февраля 2018

Это

Пример:

objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";
...