как передать параметр 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);

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

6 ответов


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

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }

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

вы не можете хранить значение null в обычной переменной типа значения, не имеющей значения null. Типы значений Nullable по-прежнему являются структурами, но они обертывают ненулевой тип и добавьте логическое значение, чтобы указать, является ли оно" реальным " значением или null. C# добавляет синтаксический сахар вокруг него, позволяя использовать null литерал для назначений, различных преобразований, поднятых операторов etc:

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

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

EDIT: хорошо, так что это выглядит как StockBO.Client_id должно иметь тип short? - но тогда это не позволит DBNull.Value быть установленным сразу. Вы следует использовать null для установки идентификатора клиента в значение null. Всякий раз, когда вы переводите между объектами и параметрами и результатами SQL, вам нужно будет выполнить такое преобразование самостоятельно - если вы обнаружите, что делаете это регулярно, разработайте некоторые вспомогательные методы, чтобы сделать это проще для вас.

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


от SQL до C#>

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

от C# до SQL >

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


попробовать DBNull.Value; например:

dbParamId.Value = (object)MyID ?? DBNull.Value;

лучше сразу назначить DBNull.Значение как:

sBO.Client_id = Значение Dbnull.Значение

значение dbnull.Значение для всех объектов


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

var Result = ParamValue as int?;

чтобы определить, является ли результат нулевым, проверьте результат.Свойство hasvalue. В противном случае используйте его как обычное целое число или результат.Значение