c # (3.5) использовать адаптеры таблиц для чтения / записи нулевых значений DateTime в базу данных

Я подключаюсь к базе данных с помощью наборов данных VS2008. Одна из таблиц в базе данных содержит столбец DateTime, который допускает значения NULL (например, Type: DateTime?)

В наборах данных MSDN категорически говорится:

Структура Nullable или Nullable в настоящее время не поддерживается в DataSet.

Однако на сайте MSDN для адаптеров таблиц указано, что TableAdaters МОЖЕТ поддерживать типы, допускающие значение NULL. :

Адаптеры таблиц поддерживают типы, допускающие значение NULL Nullable (Of T) и T ?. Дополнительные сведения о типах, допускающих значение NULL ... Дополнительные сведения о типах, допускающих значение NULL, в C # см. В разделе Использование типов, допускающих значение NULL (Руководство по программированию на C #).

Я смущен!

В конструкторе DataSet я установил свойство столбца, вызывающего нарушение, равным 'AllowDBNull = True', но всякий раз, когда я запускаю запрос TableAdapter, который возвращает нулевое значение DateTime (SELECT * FROM UDF), я получаю следующее исключение: "ArguementOutOfRangeException: Year, Month , а параметры Day описывают непредставимое DateTime. "

Одна из моих идей заключалась в том, чтобы изменить тип Column на System.Object, чтобы правильно обрабатывать нулевые значения, а затем я могу выполнять преобразования в своем собственном коде, однако я все равно получаю то же самое исключение.

В этом вопросе говорится, как однажды справиться с нулями. запрос вернулся, однако я не могу вернуть запрос.

Как я могу изменить TableAdapter и / или Dataset, чтобы я мог выполнять запрос к таблице, который может обрабатывать нули в базе данных?


person TK.    schedule 18.11.2010    source источник
comment
Лучше покажи запрос. Это должно просто работать.   -  person Henk Holterman    schedule 18.11.2010
comment
Я думаю, что запрос работает, я полагаю, что проблема в автоматически сгенерированном TableAdapter / Dataset, который не может взаимодействовать с нулевым DateTime и просто вызывает исключение.   -  person TK.    schedule 18.11.2010
comment
Нет, сгенерированные таблицы данных могут нормально обрабатывать столбцы, допускающие значение NULL.   -  person Henk Holterman    schedule 18.11.2010
comment
Да ... извините, я должен был это пояснить при добавлении запроса.   -  person TK.    schedule 19.11.2010


Ответы (1)


Решение, которое я нашел, заключалось в том, чтобы использовать функцию Oracle TO_CHAR () и сообщить адаптеру таблицы ожидать строковое значение

SELECT to_char(NULL_DATE_FIELD,'dd/mm/yyyy HH24:MI:SS') FROM *

Это означает, что в используемом коде должно произойти некоторое преобразование. Но не идеально!

person TK.    schedule 08.12.2010