Ответ 1
if (myReader["Additional"] != DBNull.Value)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
У меня есть datareader, который возвращает lsit записей из базы данных sql-сервера. У меня есть поле в базе данных под названием "Дополнительно". Это поле составляет 50% от времени, пустого или нулевого.
Я пытаюсь написать код, который проверяет, является ли это поле isnull. Логика этого: Если поле "Дополнительно" содержит текст, тогда отображение информации в противном случае скрыть поле.
Я пробовал:
if (myReader["Additional"] != null)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
Приведенный выше код дает мне эту ошибку:
Сведения об исключении: System.IndexOutOfRangeException: Дополнительные
Любая помощь будет принята с благодарностью...
if (myReader["Additional"] != DBNull.Value)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
Я не использовал 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;
}
}
Кевин
if (myReader.HasRows) //The key Word is **.HasRows**
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null Or Empty";
}
Это правильное и проверенное решение
if (myReader.Read())
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null";
}
Я также использую OleDbDataReader.IsDBNull()
if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
Прежде всего, вы, вероятно, захотите проверить DBNull
не обычный Null
.
Или вы можете посмотреть на метод IsDBNull
В дополнение к приведенным предложениям вы можете сделать это прямо из своего запроса, например:
SELECT ISNULL([Additional], -1) AS [Additional]
Таким образом, вы можете записать условие, чтобы проверить, является ли значение поля < 0 или >= 0.
@Joe Philllips
SQlDataReader.IsDBNull(int index) требует порядкового номера столбца. Есть ли способ проверить нули, используя имя столбца, а не его порядковый номер?
AMG - Извините, у меня был светлый момент. Поле "Дополнительно" было добавлено в базу данных после того, как я изначально разработал базу данных.
Я обновил весь свой код, чтобы использовать это новое поле, однако я забыл обновить фактический код datareader, который делал вызов, чтобы выбрать поля базы данных, поэтому он не вызывал "Дополнительные"
Я также сталкиваюсь с такой проблемой, но мой, я использую DbDataReader в качестве своего общего читателя (для SQL, Oracle, OleDb и т.д.). Если использовать DataTable, DataTable имеет этот метод:
DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");
используя это, я могу определить, существует ли этот столбец в наборе результатов, который имеет мой запрос. Я также смотрю, имеет ли DbDataReader эту возможность.