SQL DataReader, как показать нулевые значения из запроса

У меня есть DataReader и StringBuilder (C # .NET), которые используются следующим образом;

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader["Col1"], reader["Col2"], reader["Col3"]);
}

Что отлично подходит для моего использования, но когда строка имеет значение NULL, мне нужно, чтобы она возвращала «null», а не просто «». Что было бы хорошим способом добиться этого?

Предложения очень ценятся


person cc0    schedule 05.05.2010    source источник


Ответы (2)


Пытаться:

Convert.IsDBNull(reader["Col1"]) ? "null" : reader["Col1"]

В качестве альтернативы, если вы собираетесь использовать это неоднократно, это, вероятно, идеальный кандидат для метода расширения с ограниченным объемом, например:

public static class ExtensionMethods
{
    public static object GetValueOrNull(this SqlDataReader reader, string key)
    {
        return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key];
    }
}

Итак, вы могли написать:

var valueOfReader = reader.GetValueOrNull("Col1");

Что определенно сделало бы все более аккуратным, если бы вам нужно было использовать эту логику несколько раз внутри одного StringBuilder.AppendFormat вызова:

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3"));
}
person Rob    schedule 05.05.2010
comment
Отличный ответ! Большое спасибо за то, что нашли время написать все это. - person cc0; 05.05.2010
comment
Конечно, если вы пошли по маршруту метода расширения, вы могли бы вернуть что угодно (например, значение, которое вы передали), если оно равно null, а не только null - что сделало бы его более гибким =) - person Rob; 05.05.2010
comment
Простой код отлично работает, однако кажется, что этот SqlDataReader не работает в статическом контексте. И названия «читатель» не существует в текущем контексте. У вас есть быстрый комментарий, как это исправить? К сожалению, я здесь новичок. - person cc0; 05.05.2010
comment
Ааааааааааааааааааааааааааааааа иено и и и и "" "и в" я пропустил что-то - я соответствующим образом отредактировал метод расширения :) " - person Rob; 05.05.2010
comment
@Rob - Спасибо, что нашли время! Я очень ценю это. Мне удалось заставить ваш код работать. - person cc0; 05.05.2010

person    schedule
comment
Я проголосовал за то, чтобы удалить свой ответ, который был таким же. Я опоздал на несколько секунд! - person sgmeyer; 05.05.2010