Беспорядок с ПУСТЫМИ УКАЗАТЕЛЯМИ в C#

Ваша ошибка не воспроизводима.

Следующий тест:

SELECT (CONVERT(DATE, (CONVERT(varchar, 'Oct') + ' 1 ' + CONVERT(varchar, '2017')))) 

Не выдает ошибку и приводит к:

2017-10-01

Ошибка должна быть либо в другой части кода, либо из-за некоторых данных в вашей таблице за пределами того, что вы описали (действительный месяц / год)

7
задан DotnetDude 3 April 2009 в 14:12
поделиться

10 ответов

Конечно.

System.DBNull класс, который был (и все еще), используемый ADO.NET для представления a null значение в базе данных.

null на самом деле a null ссылка, и в Вашем коде приложения любой ссылочный тип должна использовать null как, ну, в общем, null значение.

Использование MinValue для различных типов примитивов (который, так как они - типы значения, не может быть присвоен null) относится ко времени темных дней перед C# 2.0, который представил дженерики. Теперь предпочтительный метод для представления nullable типа примитива состоит в том, чтобы использовать Nullable<T> универсальный тип, обычно представленный в стенографии с вопросительным знаком после типа примитива. Например, я мог объявить nullable int переменную называют foo в C# как:

Nullable<int> foo;

или

int? foo;

Оба идентичны.

27
ответ дан 6 December 2019 в 05:39
поделиться
  • null только допустимо для ссылочных типов: типы, которые являются a class вместо a structure.
  • .NET также имеет типы значения: интервал, дважды, DateTime, и т.д. Типы значения не могут быть пустыми, Вы так Вы обычно сравниваете типы к их значению по умолчанию, которое является очень часто type.MinValue, но могло бы быть что-то (рассмотрите булевскую переменную, например).
  • Nullable<T> для того, когда у Вас есть тип значения, который мог бы действительно быть пустым. Значение по умолчанию (возможно, MinValue) также допустимо, и необходимо отличить его от того, когда переменная еще не была присвоена. В C# можно ли использовать a? со значением вводят как нотация стенографии (например: int?), но Вы все еще создаете то же Nullable<T>.
  • DBNull конкретно относится к Нулевым значениям от базы данных. Это не то же самое как использующий пустой указатель в другом месте на языке: это только для того, чтобы говорить с базой данных, таким образом, можно знать, когда запрос возвратил нулевое значение.
  • При использовании дженериков Вы будете также видеть default(T) создайте используемый, где T является параметром типа. Это позволяет Вам устанавливать значение по умолчанию типа, не зная, является ли тот тип ссылочным типом или типом значения, а тем более каково определенное значение по умолчанию типа значения могло бы быть.
5
ответ дан 6 December 2019 в 05:39
поделиться

A Null значение представляет любой объект ссылочного типа, которому еще не выделили его память.

MinValue не представляет a Null, скорее это - свойство, которое часто используется для представления самой маленькой постоянной величины, которую может иметь данный тип значения.

DBNull.Value класс является отображением Пустых указателей, возвратился/передал к базе данных.

Универсальный тип Nullable позволяет Вам присвоить Нулевые значения типу Значения.

1
ответ дан 6 December 2019 в 05:39
поделиться
  • пустой указатель для ссылочных типов в фактическом нулевом значении
  • Nullable, добавленный в.NET 2.0, является способом выразить, аннулирует для типов значения, которые по определению не могут быть пустыми.
  • То же с DateTime. MinValue - DateTime является типом значения и не может быть пустым, таким образом, у Вас может быть конвенция что известное значение, как DateTime. MinValue рассматривают, как будто это было пустым. Это также имеет другие использования.
1
ответ дан 6 December 2019 в 05:39
поделиться

"MinValue"s использовались с типами значения, прежде чем nullable типы пришли в C# 2.0. Таким образом, существует много унаследованного кода, который использует старый стиль знания, когда тип значения не имеет значения. В наше время намного легче использовать a DateTime? date = null чем DateTime date = DateTime.MinValue. Насколько DBNull идет, который является чем-то, что требуется как уровень абстракции к базам данных, но можно избежать необходимости соглашение с ним сами путем использования ORM, такого как NHibernate или некоторые такой - Вы в значительной степени из приложения. точка зрения разработки должна будет только иметь дело со встроенными типами C#.

0
ответ дан 6 December 2019 в 05:39
поделиться

Ссылочные типы (иначе объекты) могут быть установлены в NULL начиная с переменных ссылочного типа просто указатель на фактический экземпляр. Указание на отсутствие экземпляра легко, так как можно установить переменную в NULL непосредственно.

Поскольку значение вводит, это немного более твердо, так как переменная типа значения всегда содержит значение. Поэтому использование Дважды. MinValue или DateTime. MinValue был несколько допустим в pre-Nullable дни. Тогда не было никакого простого способа выразить отсутствие значения в типах значения.

Теперь, с nullable типами можно сказать:

double? d = null;

И таким образом у Вас могут также быть переменные типа значения, содержащие пустой указатель.

Система. DBNull является другой историей, так как он непосредственно связывается с выражением значения "ПУСТОЙ УКАЗАТЕЛЬ" в наборах данных. Это было представлено перед nullable типами, какой imo заменяет DBNull.

0
ответ дан 6 December 2019 в 05:39
поделиться

MinValue не является пустым. Это - MinValue. Это иногда используется "в качестве пустого указателя" людьми, использующими C# 1.0, который не имел nullable типов значения. Вместо этого они должны использовать Nullable, ot DateTime?.

DBNull является значением.NET, которое используется для общения с базой данных (пустой указатель "DB"). Понятие базы данных ПУСТЫХ средств что-то другое от нулевой ссылки.NET. В терминах базы данных ПУСТОЙ УКАЗАТЕЛЬ означает "неизвестный" или "отсутствующий".

0
ответ дан 6 December 2019 в 05:39
поделиться

Большинство типов в.NET является ссылочными типами, и null "не ссылка", которая может быть присвоена переменной или полю, чтобы указать, что нет никакого объекта.

Все другие типы в.NET являются типами значения. Всегда существует значение с типом значения, таким образом, никакая способность не указать "ни на какое значение". Поэтому реализация может определить определенные специальные значения для указания на это. Часто тип значения MinValue (постоянное) поле используется для этого. Так использование DateTime.MinValue поскольку дата рождения может указать "не известный" или "не применимый" (например, для корпоративного объекта).

DbNUll существует для выражения значения RDBMS NULL который немного отличается от.NET. В большинстве случаев это будет переведено в пустой или подобное.

Наконец, Nullable<T> обертка для типов значения к более непосредственно специальному, "не известному", и обычно более оптимальный вариант, чем использование MinValue, но был добавлен в.NET 2, таким образом, более старые проекты, возможно, начали использовать MinValue прежде Nullable<T> доступно.

0
ответ дан 6 December 2019 в 05:39
поделиться

лучший способ для tou для понимания этого различные нулевые значения состоят в том, чтобы судить их и видеть то, что использование каждого, но сделать вещи простыми вот некоторая инструкция

  • пустой указатель может использоваться только на ссылочных типах как наборы, и пользовательские классы (строка специальна),
  • DBNull для нулевых значений, которые вышли из запроса дб.
  • потому что мы наклоняемся, присваивают пустой указатель десятичному числу, или дважды мы присваиваем им со свойством MinValue (они - объекты значения),

  • Nullable является способом для разработчика присвоить нулевые значения для оценки объектов как десятичное число, Nullable<int> is same as int?


я надеюсь, что помог Вам понимающий различия.

0
ответ дан 6 December 2019 в 05:39
поделиться

Важное различие здесь то, что между типами значения и ссылочными типами. Типы значения представляют непосредственно определенное значение, тогда как ссылочные типы указывают на ячейку памяти, которая должна представить значение. Когда ссылочный тип на самом деле не указывает на ячейку памяти с допустимым содержанием, ссылка является Нулевой.

Так как типы значения являются прямыми представлениями значения, они не могут быть пустыми. Однако могло бы иметь место, что фактическое значение типа значения неизвестно. Для этого случая .NET обеспечивает конструкцию типов Nullable. Когда такая конструкция не доступна, однако, люди склонны использовать специальное предложение или значения по умолчанию, такие как MinValue.

При общении с базами данных большим количеством вещей мы ожидаем быть типами значения, может на самом деле быть Пустым, начиная с этого это способ, которым база данных обрабатывает неизвестные значения. Это может также быть решено типами Nullable, но они были не всегда доступны. Вот почему DBNull существуют, для контакта с возможным пустым указателем в базе данных.

0
ответ дан 6 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: