как передать sql параметр как нулевое значение в переменной целочисленного типа данных?

как передать sql параметр как нулевое значение в к переменной целочисленного типа данных?

        StockBO sBO = new StockBO();
        sBO.Mode = 2;
        if (ddcmpanyname.SelectedIndex != 0)
        {
            sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue);
        }
        else
        {
            sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types.
       sBO.Client_id =DBNull.Value;//Cannot implicitly convert type 

        }
        ds=_StockController.StockGet(sBO);

я изменил код как это, он еще дает ошибку как я моя проверка комментария часть

8
задан Benjamin 16 June 2014 в 10:40
поделиться

5 ответов

Попробуйте это,

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }
20
ответ дан 5 December 2019 в 06:09
поделиться

Не совсем понятно, о чем вы. Если вы пытаетесь передать нулевое значение в параметре SQL, вы должны использовать DBNull.Value в качестве значения для вашего SqlParameter (или любого другого типа, который вы используете). Если вы хотите представить в C # целое число, допускающее значение NULL, используйте int? (или Nullable - это одно и то же).

Вы не можете сохранить нулевое значение в обычной переменной, не допускающей значения NULL. Типы значений, допускающие значение NULL, по-прежнему являются структурами, но они заключают в оболочку тип, не допускающий значения NULL, и добавляют логическое значение, чтобы указать, является ли оно «реальным» значением или NULL.В C # добавлен синтаксический сахар, позволяющий использовать литерал null для присваиваний, различных преобразований, операторов с поднятыми операциями и т. Д .:

int? value = 5;
value = null;
if (value == null)
{
    ...
}

Если это не помогает, дайте нам больше информации о том, что именно вы ' повторно пытаюсь сделать.

РЕДАКТИРОВАТЬ: Итак, похоже, что StockBO.Client_id должен иметь тип short? - но тогда это не позволит DBNull.Value устанавливаться напрямую. Вы должны использовать null , чтобы установить для идентификатора клиента нулевое значение. Всякий раз, когда вы выполняете перевод между объектами и параметрами и результатами SQL, вам необходимо выполнять такое преобразование самостоятельно - если вы обнаружите, что делаете это регулярно,разработайте несколько вспомогательных методов, которые упростят вам задачу.

Конечно, если вы начнете использовать LINQ to SQL или что-то подобное, вам не нужно беспокоиться о DBNull.Value - поставщики LINQ обычно поддерживают типы значений, допускающие значение NULL, напрямую.

4
ответ дан 5 December 2019 в 06:09
поделиться

из SQL в C #>

int number;
Int32.TryParse(paramvalue, out number);

из C # в SQL>

добавьте DBNull в свой параметр

1
ответ дан 5 December 2019 в 06:09
поделиться

Попробуйте DBNull.Value ; Например:

dbParamId.Value = (object)MyID ?? DBNull.Value;
1
ответ дан 5 December 2019 в 06:09
поделиться

Учитывая, что ParamValue содержит результат запроса в виде целого числа или DBNull.Value, я преобразую его в int? следующим образом:

var Result = ParamValue as int?;

Чтобы определить, нужно ли Результат равен нулю, проверьте Result.HasValue. В противном случае используйте его как обычное целое число или Result.Value

0
ответ дан 5 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

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