Как я могу включить DBNull в качестве значения в мой строго типизированный набор данных?
-
13-09-2019 - |
Вопрос
Я создал строго типизированный набор данных (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?" в качестве типа данных, но Visual Studio выдает ошибку, когда я ввожу ее, говоря, что "Для столбца требуется допустимый тип данных".
Решение
у вас есть в классе MyDataTableRow сгенерированный метод с именем:SetMyColNull().
myRow.SetMyColNull();
вы также можете сделать :
myRow["MyCol"] = DBNull.Value;
потому что myRow["MyCol"]
относится к типу object
РЕДАКТИРОВАТЬ (добавлено вопросом OP):
Существует также параллельный метод, сгенерированный для обратного считывания этого значения, IsMyColNull().
Другие советы
Есть две вещи.
Разрешение DBNull - это отдельная настройка от возможности установки значения в DBNull.
Я использовал только интерфейс DataSet XSD для настройки этого...но мне пришлось не только установить "AllowDBNull = true", но и установить "NullValue = (null)".Первоначально "NullValue" было присвоено значение "(Исключение)".Это означало, что набор данных будет принимать bieng .Fill()ed с значением null, но не позволит вам вручную установить значение null .
Не уверен, что это ваша проблема, но звучит похоже.
просто перейдите в режим конструктора в dataset и щелкните правой кнопкой мыши на поле, для которого вы хотите включить значение null, и выберите свойства , в окне свойств установите значение AllowDBNull равным True, а значение NullValue равным (NULL) ;у меня это работает правильно !с наилучшими пожеланиями !
int не принимает значение null, но int?(заполняемая версия) делает.Я думаю, вам нужен этот тип данных вместо этого.