Пустой безопасный способ получить значения от IDataReader

(LocalVariable) ABC.string (Имя) = (Idatareader)datareader. GetString (0);

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

Я вручную делаю некоторых если условие здесь. Я не хочу писать ручное условие проверить все мои переменные..

Я делаю что-то вроде этого теперь..

string abc =  (Idatareader)datareader.GetValue(0);
if(abc = null)
    //assiging null
else
    assiging abc value

есть ли, чему-то нравится, мы можем записать дополнительный метод для этого?спасибо

12
задан Sky Sanders 9 April 2010 в 19:32
поделиться

2 ответа

Вот пара методов расширения, которые помогут решить все ваши проблемы, связанные с получением строго типизированных значений из средства чтения данных. Если значение равно DbNull, будет возвращен тип по умолчанию. В случае строки , которая является классом, будет возвращен null . Если поле было int , то было бы возвращено 0 . Кроме того, если вы ожидаете int? , скажем, из обнуляемого поля int, будет возвращено null .

Конкретное использование для случая Кумара:

string abc = datareader.GetValueOrDefault<string>(0);

Общее использование

var name = GetValueOrDefault<string>(reader, "Name");

или

var name = reader.GetValueOrDefault<string>("Name");

или

var name = reader.GetValueOrDefault<string>(0);

Расширение

public static class NullSafeGetter
{
   public static T GetValueOrDefault<T>(this IDataRecord row, string fieldName)
   {
       int ordinal = row.GetOrdinal(fieldName);
       return row.GetValueOrDefault<T>(ordinal);
   }

   public static T GetValueOrDefault<T>(this IDataRecord row, int ordinal)
   {
       return (T)(row.IsDBNull(ordinal) ? default(T) : row.GetValue(ordinal));
   }
}

из http://skysanders.net/subtext/archive/2010/03/02 /generic-nullsafe-idatarecord-field-getter.aspx

24
ответ дан 2 December 2019 в 04:42
поделиться

Я бы использовал что-то вроде этого:

string abc = (IDataReader)datareader.GetValue(0) ?? "Default";
0
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: