Когда нам нужно использовать DBNull.Value, null и "" в C # .Net? - PullRequest
10 голосов
/ 17 июня 2011

У меня небольшая путаница со следующими вещами:

  1. Нулевой
  2. DBNull.Value
  3. ""

Когда я использую условные операторы ИЛИ при назначении значений, я немного путаюсь с этими вещами. Иногда выдает ошибку, а иногда работает. Я хочу знать, когда я хочу использовать вышеуказанные вещи. Они специфичны для типов данных? Мне нужны ваши ценные предложения, пожалуйста.

Ответы [ 3 ]

14 голосов
/ 17 июня 2011

null - это одно из двух:

  • ссылка, которая не на самом деле указывает на объект - просто индикатор "ничего" (по сути, это значение 0 в качестве ссылки)
  • a Nullable<T> struct, которая в настоящее время не имеет значения (свойство HasValue также вернет false)

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

"" - строковый литерал с нулевой длиной - совершенно допустимая, но пустая строка. Значение этого заключается в том, что между строкой null и строкой "" методы экземпляра, такие как value.Trim(), будут вести себя по-разному; null.Trim() сгенерирует исключение; "".Trim() это просто "". В целом, использование string.IsNullOrEmpty(value) в качестве теста устраняет это различие.

12 голосов
/ 17 июня 2011
  • null является внутренним для языка и просто означает, что ссылка на объект в данный момент не ссылается на реальный объект. По сути, ключевое различие между типами значений (int, bool и т. Д.) И ссылочными типами (Object, любой класс и т. Д.) Заключается в том, что типы значений являются конкретным значением в памяти, а ссылочные типы являются указателем на представление объекта. в памяти. Этот указатель иногда может указывать, ну, ну, ничего. В этом случае это null. В основном это означает, что «здесь нет C # объекта».

  • DBNull.Value немного отличается в целях работы с базами данных. Столбец базы данных может содержать значение null. Однако, когда эти данные выбираются в объект (например, DataTable) в коде, является объектом, на который можно ссылаться, насколько это касается кода. Однако этот объект содержит представление значения null из базы данных. Таким образом, DBNull.Value существует, чтобы представить это различие. В основном это означает, что «здесь есть объект C #, который извлек значение из базы данных, но это значение null».

  • "" (или string.Empty, если вы хотите использовать встроенную константу для этого) является допустимым значением. Это существует, это не null, это во всех отношениях string. В нем просто нет персонажей. Полезный инструмент для проверки этого - string.IsNullOrEmpty(), который проверяет либо null, либо пустую строку.

1 голос
/ 18 августа 2014

null применяется к нулевым значениям C #.

System.DBNull.value применяется к значениям NULL, специфичным для базы данных.

Когда вы используете ExecuteScalar (), он дает значение NULL, если столбец не найден или не возвращен, но столбец найден и значение равно NULL, тогда он возвращает DBnull, значит, в столбце, если значение равно NULL, если не будет возвращать DBnull, ненуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...