Как вы обрабатываете тип Nullable с помощью SqlDataRecord

StackOverflow https://stackoverflow.com/questions/8405320

Вопрос

Я разбираю XML (LINQ to XML) и использую тип, допускающий значение NULL (int? и decimal?) в тех случаях, когда элемент / атрибут пуст.Однако при создании моей коллекции для передачи в БД (с использованием TVP) я не знаю, как обрабатывать случаи, когда значение фактически равно нулю.Я не могу передать значение NULL в SqlDataRecord SetInt32 или SetDecimal, и я не хочу устанавливать его в ноль .... Я действительно хочу, чтобы оно было равно NULL.

Сообщаете, что нет перегрузки для генерального кода тегов?

Счетчик ниже - это тип, допускающий значение NULL (счётчик сгенерированного кода кода)

родовое слово

Есть идеи, как справиться с этим, не передавая ноль (сохраняя ноль)?

Это было полезно?

Решение

Способ расширения:

родовое слово

или, чтобы использовать общий код кода, как было предложено Д. Стэнли:

родовое слово

Примечание, 9 декабря 2013 г. Возвращаясь к этому ответу из-за комментария, я заметил небольшую возможность для улучшения, основанную на серии статей Эрика Липперта о микрооптимизациях, допускающих значение NULL, которые можно найти по адресу http://ericlippert.com/2012/12/20/nullable-micro-optimizations-part-один / .

Вкратце, хотя свойство SetSqlInt32 требует меньше ввода и поэтому, возможно, более оптимально для программиста, оно должно генерировать исключение, если HasValue имеет значение false.С другой стороны, метод Value - это простой доступ к полю.Из-за этого для кода GetValueOrDefault() требуется меньше инструкций, и он с большей вероятностью будет встроен, поэтому он более оптимален для компилятора и процессора.

Другие советы

Я никогда не работал с SqlDataRecord, но при использовании DataTable и DataRow или при использовании параметризованных запросов я указываю null с помощью DBNull.Value .

С помощью SqlDataRecord, похоже, вы можете использовать метод SetDBNull .

Следует использовать SetSqlInt32 вместо SetString.Попробуйте

родовое слово

// Я обнаружил, что это работает лучше всего для меня при проверке или работе с типами, допускающими значение NULL // в моем примере я проверяю значения, хранящиеся в массиве String []

родовое слово

возможно, вы можете попробовать следующее.

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top