2013-10-15 2 views
0

Можно ли изменить тип данных поля/свойства в .net через отражение или что-то в этом роде?Изменение типа данных поля в .net

Я ищу эту функцию, так как есть проблема в сильно типизированных наборах данных. Сильно типизированные наборы данных не дают вам гибкости при изменении типов данных типов с нулевым значением. См. Связанную ссылку here. Поэтому, если есть возможность изменить тип данных во время выполнения, эту проблему можно устранить. Кроме того, добавить; в соответствии с этим MSDN Link; Команда Microsoft не очень хочет предоставить эту поддержку.

+1

Если вы не знаете тип столбца, вы, вероятно, не должны использовать строго типизированный набор данных. –

+0

Я не знаю, можете ли вы использовать 'dynamic' или нет, но есть веская причина, почему люди используют это только тогда, когда это необходимо. – gunr2171

+0

@MikeChristensen Я знаю тип данных, но, к сожалению, когда я пытаюсь перебрать таблицу данных, я получаю ошибки, поскольку конструктор набора данных VS имеет единственное свойство Throw Exception. – shankbond

ответ

1

Во-первых, это не ошибка; это связано с различием между dbnull, т.е. неизвестным значением и значением null, т.е. ссылкой, указывающей нигде. Это усугубляется тем фактом, что сами Microsoft, похоже, плохо объясняют это, судя по некоторым непрозрачным и бесполезным ответам на Connect и в других местах.

Существует ряд решений этой проблемы, в зависимости от того, чего вы пытаетесь достичь. Если вы используете привязку данных, тогда механизм привязки в основном обрабатывает это прозрачно для вас; если вы попадаете в набор данных непосредственно в коде, дизайнер будет создавать методы Isxxxnull/setxxxnull для проверки значения перед его использованием. Наконец, вы можете изменить тип данных на system.object, или вы можете переназначить NullValue в конструкторе для ввода другого значения, если хотите, если это значение действительно для типа данных - например, 0 или -1 для int.

0

Не знаю, что я знаю. Информация типа и привязка определяются при компиляции, поэтому нет способа изменить его во время выполнения.

Один шаблон для изменения набора текста - adapter pattern. Это может просто пройти через все другие поля, а затем «преобразовать» рассматриваемое поле в новый тип. Конечно, это происходит и во время компиляции.

Если вы раскрываете немного больше того, что вы пытаетесь сделать, может быть лучший вариант.

0

Dataset s довольно устарел и связан с .net v1.0. Microsoft никогда не будет вносить изменения или дополнения к ним. В целом лучший подход - это строго типизированные POCOs. Вы даже можете создавать множественные, строго типизированные свойства, которые используют одно и то же хранилище (тип объекта). Перед доступом к соответствующему свойству вам нужно будет проверить правильный тип.

+0

Спасибо за ответ, требуется много времени, создавая эти модели на основе POCO, а затем заполняя их ADO.net.Это связано с тем, что я пошел в Dataset, но теперь я застрял :( – shankbond

+1

Как Linq to SQL, так и EF создадут для вас POCO или POCO. – andleer

+0

Спасибо за редактирование Mike. – andleer

Смежные вопросы