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

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

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

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

хорошо. Однако, когда я пытаюсь установить значение Значение dbnull:

myRow.MyCol = DBNull.Value;

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

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

EDIT: я также попытался ввести " int?"как тип данных, но Visual Studio выдает ошибку при вводе, говоря, что "столбец требует допустимого типа данных."

4 ответов


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

myRow.SetMyColNull();

вы также можете сделать :

myRow["MyCol"] = DBNull.Value;

, потому что myRow["MyCol"] типа object

EDIT (добавлено вопросом OP):

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


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

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

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

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


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


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