Как включить 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) ; это работает для меня прямо ! с наилучшими пожеланиями !