srihari1904 Ответов: 5

Объект не может быть приведен из DBNull в другие типы показана ошибка?


Привет,
Мой код таков, что я не знаю, в чем моя ошибка, пожалуйста, помогите мне.
decimal getTotalValue(GridView view, int listSourceRowIndex)
    {
        decimal unitPrice = Convert.ToDecimal(view.GetListSourceRowCellValue(listSourceRowIndex, "Each"));  //Object cannot be cast from DBNull to other types
        decimal quantity = Convert.ToDecimal(view.GetListSourceRowCellValue(listSourceRowIndex, "Quantity"));
        decimal discount = Convert.ToDecimal(view.GetListSourceRowCellValue(listSourceRowIndex, "TaxPercentage"));
        return unitPrice * quantity * (1 - discount);
    }

    private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
    {
        GridView view = sender as GridView;
        if (e.Column.FieldName == "Totalototal" && e.IsGetData) e.Value =
          getTotalValue(view, e.ListSourceRowIndex);
    }


Заранее спасибо.

5 Ответов

Рейтинг:
40

OriginalGriff

Ошибка довольно явная: "Объект не может быть приведен из DBNull в другие типы"
Ваше поле базы данных может содержать (и содержит) SQL NULL значения-и когда они возвращаются через запрос, значение представляет собой определенный код, который представляет это таким образом, что ваш код может проверить и использовать: DBNull.Ценность
Есть веские причины, почему это не просто null - в основном это связано с возможностью определить разницу между отсутствующим параметром и нулевым значением БД - но если ваша таблица БД может содержать нули, то вам нужно проверить возвращаемое значение, чтобы убедиться, что оно не является DBNull.Значение до того, как вы попытаетесь его привести, так как нули не могут быть превращены в допустимые объекты.


Рейтинг:
29

Karthik_Mahalingam

Попробовать это....


string value =  view.GetListSourceRowCellValue(listSourceRowIndex, "Each") +"" ;
           decimal unitPrice;
           decimal.TryParse(value, out unitPrice);


Рейтинг:
2

Nooa

ты скопировал код оттуда, верно?

http://documentation.devexpress.com/#WindowsForms/CustomDocument1477[^]

но, пожалуйста, проверьте, можете ли вы добавить что-то вроде ".Value" или ".ToString " за запросом.
Например, следующее:

decimal unitPrice = Convert.ToDecimal(view.GetListSourceRowCellValue(listSourceRowIndex, "Each").Value);


у меня нет возможности создать проект, который содержит GridView прямо сейчас.
так что мне остается только догадываться.


Рейтинг:
1

shashi keshar

проверьте свою хранимую процедуру и

установить переменную как set @conducted=0

изменить процедуру dbo.usp_Batch

(

@batchid int,

@sturegno инт,

@intresult int output,

@total int output,

@проведенных выходных инт ,

выход @сотрудника инт

)

как

НАЧАТЬ

объявить @lec varchar(макс.)

объявить @в SQL тип nvarchar(Макс),@sql1 с Тип nvarchar(Макс),@sql2 тип nvarchar(Макс)

объявить @вых1 тип nvarchar(Макс),@вых2 тип nvarchar(Макс),@out3 тип nvarchar(Макс)
set @total=0
set @conducted=0
set @attendent=0

set @intresult=1


Рейтинг:
0

Member 12390161

I'm thinking that your output parameter is coming back with a DBNull value. Add a check for that like this

var outputParam = dataAccCom.GetParameterValue(IDbCmd, "op_Id");
if(!(outputParam is DBNull))
     DataTO.Id = Convert.ToInt64(outputParam);


[no name]

Очень хорошо сделано. Этот вопрос был задан и на него был дан ответ 3 года назад, но эти действительно ценные бесполезные интернет-точки все равно заставляют вас отвечать.