Подтвердить что ты не робот

SqlParameter со значением по умолчанию, установленным в 0, не работает должным образом

Я делал что-то вроде этого:

SqlParameter param = new SqlParameter("@Param", 0) { SqlDbType = SqlDbType.Int };

private void TestParam(SqlParameter param) {
   string test = param.Value.ToString();  // Getting NullReferenceException here
}

Но я перестаю получать исключение, когда я так выразился:

SqlParameter param = new SqlParameter("@Param", SqlDbType.Int)  { Value = 0 };

private void TestParam(SqlParameter param) {
    string test = param.Value.ToString();  // Everything OK
}

Может ли кто-нибудь сказать мне, почему SqlParameter предполагает, что 0 совпадает с нулевым?

Изменить: MSDN Объясняет это здесь: Конструктор SqlParameter

4b9b3361

Ответ 1

Соблюдайте осторожность при использовании этой перегрузки конструктора SqlParameter для укажите значения целочисленных параметров. Поскольку эта перегрузка принимает значение type Object, вы должны преобразовать целочисленное значение для типа объекта, когда значение равно нулю, так как следующий С# пример демонстрирует.

Parameter = new SqlParameter("@pname", Convert.ToInt32(0));

Если вы не выполните это преобразование, компилятор предполагает, что вы пытается вызвать SqlParameter (string, SqlDbType) конструктор перегрузки.

Спасибо Msdn:)

Ответ 2

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

Лично я бы использовал;

Value = 0

возможно, в инициализаторе объекта.