Как передать параметр SQL как нулевое значение в переменной типа целочисленного типа? - PullRequest
8 голосов
/ 15 июля 2010

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

20 голосов
/ 15 июля 2010

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

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }
4 голосов
/ 15 июля 2010

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

Нельзя хранить нулевое значение в обычной переменной типа, не допускающей значения NULL. Типы значений Nullable по-прежнему являются структурами, но они оборачивают ненулевой тип и добавляют логическое значение, чтобы указать, является ли оно «реальным» значением или нулевым. 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.

1 голос
/ 24 июня 2013

Лучше напрямую назначить DBNull.Value, например:

sBO.Client_id = DBNull.Value

DBNull.Value для всего объекта

1 голос
/ 15 июля 2010

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

dbParamId.Value = (object)MyID ?? DBNull.Value;
1 голос
/ 15 июля 2010

из SQL в C #>

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

из C # в SQL>

добавить DBNull к вашему параметру

0 голосов
/ 15 июля 2010

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

var Result = ParamValue as int?;

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

...