как передать 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);
я изменил код как это, он еще дает ошибку как я моя проверка комментария часть
Попробуйте это,
else
{
sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
}
Не совсем понятно, о чем вы. Если вы пытаетесь передать нулевое значение в параметре 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, напрямую.
из SQL в C #>
int number;
Int32.TryParse(paramvalue, out number);
из C # в SQL>
добавьте DBNull в свой параметр
Попробуйте DBNull.Value
; Например:
dbParamId.Value = (object)MyID ?? DBNull.Value;
Учитывая, что ParamValue содержит результат запроса в виде целого числа или DBNull.Value, я преобразую его в int? следующим образом:
var Result = ParamValue as int?;
Чтобы определить, нужно ли Результат равен нулю, проверьте Result.HasValue. В противном случае используйте его как обычное целое число или Result.Value