Как правило, включайте свои включения в файлы .cpp, когда это возможно, и только в файлы .h, когда это невозможно.
Вы можете использовать предварительные объявления для устранения необходимости включать заголовки из других заголовков во многих случаях: это может помочь сократить время компиляции, что может стать большой проблемой по мере роста вашего проекта. Это хорошая привычка на раннем этапе, потому что попытка разобраться с этим на более позднем этапе (когда это уже является проблемой) может стать полным кошмаром.
Исключением из этого правила являются шаблонные классы (или функции): чтобы использовать их, вам нужно увидеть полное определение, что обычно означает помещение их в заголовочный файл.
Типизированные наборы данных не поддерживают типы, допускающие значение NULL. Они поддерживают столбцы, допускающие значение NULL, .
Генератор набора типизированных данных создает свойства, не допускающие значения NULL, и связанные методы для обработки значений NULL. Если вы создаете столбец MyDate
типа DateTime
и AllowDbNull
, установленный на true
, подкласс DataRow
будет реализовывать свойство DateTime
, не допускающее значения NULL, с именем MyDate
, метод SetMyDateNull ()
и метод IsMyDateNull ()
. Это означает, что если вы хотите использовать в своем коде тип, допускающий значение NULL, вы должны сделать следующее:
DateTime? myDateTime = myRow.IsMyDateNull() ? null : (DateTime?) row.MyDate;
Хотя это полностью не отменяет цели использования типизированных наборов данных, это действительно отстой. Это' s разочаровывает то, что типизированные наборы данных реализуют столбцы, допускающие значение NULL, менее пригодным для использования, чем, например, методы расширения System.Data
.
Это особенно плохо, потому что наборы типизированных данных используют типы, допускающие значение NULL, в некоторых местах - например, метод Add
для таблицы, содержащей столбец DateTime, допускающий значение NULL, описанный выше, будет принимать параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени для полной интеграции этих двух по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
менее удобны, чем, например, методы расширения System.Data
.
Это особенно плохо, потому что типизированные наборы данных действительно используют типы, допускающие значение NULL, в некоторых местах - например, ] Метод Add
для таблицы, содержащей описанный выше столбец DateTime, допускающий значение NULL, примет параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени полностью интегрировать эти два по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
менее удобны, чем, например, методы расширения System.Data
.
Это особенно плохо, потому что типизированные наборы данных действительно используют типы, допускающие значение NULL, в некоторых местах - например, ] Метод Add
для таблицы, содержащей описанный выше столбец DateTime, допускающий значение NULL, примет параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени для полной интеграции этих двух по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
Особенно плохо, потому что типизированные наборы данных действительно используют типы, допускающие значение NULL, в некоторых местах - например, метод Add
для таблицы, содержащей столбец DateTime, допускающий значение NULL. описанный выше будет иметь параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени для полной интеграции этих двух по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
Особенно плохо, потому что типизированные наборы данных действительно используют типы, допускающие значение NULL, в некоторых местах - например, метод Add
для таблицы, содержащей столбец DateTime, допускающий значение NULL. описанный выше будет иметь параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени полностью интегрировать эти два по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
Метод Row () для таблицы, содержащей столбец DateTime, допускающий значение NULL, описанный выше, примет параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени полностью интегрировать эти два по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
Метод Row () для таблицы, содержащей столбец DateTime, допускающий значение NULL, описанный выше, примет параметр DateTime?
.
Давным-давно я спросил об этой проблеме на форумах MSDN, и в конечном итоге менеджер проекта ADO объяснил, что типы, допускающие значение NULL, были реализованы одновременно с типизированными наборами данных, и у его команды не было времени полностью интегрировать эти два по дате отгрузки .NET 2.0. И, насколько я могу судить, с тех пор они не добавляли новых функций к наборам типизированных данных.
Похоже, что Designer
неверно указал тип базы данных для столбца.
Откройте xsd Designer
, нажмите F4
, чтобы открыть окно свойств
. Выберите соответствующий столбец и установите Nullable
(или что-то в этом роде, не помните точное имя) в значение true.
The System.DateTime Object is not nullable. To make a DateTime nullable make it a DateTime? (put a ? after DateTime)
DateTime? nullableDateTime = null;