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

Я создал строго типизированный набор данных (MyDataSet) в моем приложении .NET. Для простоты мы скажем, что у него есть одна таблица данных (MyDataTable) с одним столбцом (MyCol). MyCol имеет свойство DataType, равное «System.Int32», а его свойство AllowDBNull - «true».

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

MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();

Отлично. Однако, когда я пытаюсь установить значение DBNull:

myRow.MyCol = DBNull.Value;

Мне сказали, что я не могу этого сделать ... что он не может преобразовать это в int. В каком-то смысле это имеет смысл, поскольку я определил его как int ... но как тогда мне получить там DBNull? Разве я не должен иметь там DBNull? Разве не для этого предназначено свойство AllowDBNull?

Я явно упускаю что-то фундаментальное. Может кто-нибудь помочь объяснить, что это такое?

РЕДАКТИРОВАТЬ: Я также пробовал ввести "int?" как DataType, но Visual Studio выдает ошибку, когда я ввожу его, говоря, что «Столбец требует действительного DataType».


person Beska    schedule 22.09.2009    source источник


Ответы (4)


у вас есть в классе MyDataTableRow сгенерированный метод с именем: SetMyColNull ().

myRow.SetMyColNull();

вы также можете:

myRow["MyCol"] = DBNull.Value;

потому что myRow["MyCol"] относится к типу object

ИЗМЕНИТЬ (добавлено пользователем вопроса):

Существует также аналогичный метод, созданный для обратного чтения этого значения, IsMyColNull ().

person manji    schedule 22.09.2009
comment
Эгад! Как я это пропустил / не знал? Отлично! Большое спасибо! - person Beska; 22.09.2009

Есть две вещи.

Разрешение DBNull - это отдельная настройка от возможности установить значение DBNull.

Я использовал только интерфейс DataSet XSD, чтобы установить это ... но мне пришлось не только установить «AllowDBNull = true», но я также должен был установить «NullValue = (null)». Первоначально для «NullValue» было установлено значение «(Исключение)». Это означало, что набор данных примет bieng .Fill () ed со значением null, но не позволит вам вручную установить значение null.

Не уверен, что это ваша проблема, но звучит похоже.

person Bill Crim    schedule 22.09.2009

просто перейдите в режим конструктора в наборе данных и щелкните правой кнопкой мыши поле, для которого вы хотите включить null, и выберите свойства, в окне свойств установите AllowDBNull на True и NullValue на (NULL); у меня работает правильно! наилучшие пожелания !

person Community    schedule 31.05.2010

int не принимает null, но int? (версия INullable) делает. Я думаю, вам нужен этот тип данных.

person Stuart Thompson    schedule 22.09.2009
comment
К сожалению, это не работает ... Я пробовал это (я должен упомянуть об этом в вопросе ... Я отредактирую его для этого.) Когда я это сделаю, появляется окно, в котором жалуется, что столбец требуется действительный тип данных. - person Beska; 22.09.2009