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

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

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

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

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

myRow.MyCol = DBNull.Value;

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

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

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

Ответы [ 4 ]

13 голосов
/ 22 сентября 2009

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

myRow.SetMyColNull();

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

myRow["MyCol"] = DBNull.Value;

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

РЕДАКТИРОВАТЬ (добавлено с помощью вопроса OP):

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

1 голос
/ 31 мая 2010

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

1 голос
/ 22 сентября 2009

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

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

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

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

0 голосов
/ 22 сентября 2009

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

...