无法将类型为“ system.dbnull”的对象转换为类型为“ system.byte”的对象。 C#

时间:2018-11-26 07:20:32

标签: asp.net

当我尝试检查该行中是否有针对该特定图像的图像时,如果我设置了值== null,则显示错误,当找到图像时代码工作正常,但是当有图像时我不打印任何屏幕截图没有图像。所有这些都是在gridview中完成的

受保护的void gvupdationsummary_RowDataBound(对象发送者,GridViewRowEventArgs e)     {

    DataRowView dr = (DataRowView)e.Row.DataItem;

    if(dr!=null)
    {
        //string src = Convert.DBNull(imageUrl);

        string imageUrl="";
        if (imageUrl!=null)
        {
            Convert.IsDBNull(imageUrl);
            imageUrl = "data:image/jpg;base64," + Convert.ToBase64String((byte[])dr["imgdata"]);
            (e.Row.FindControl("image1") as Image).ImageUrl = imageUrl;
        }
        else
        {
            Convert.IsDBNull(imageUrl);
            imageUrl = null;
            (e.Row.FindControl("image1") as Image).ImageUrl = imageUrl;
        }
    }

1 个答案:

答案 0 :(得分:0)

发生异常是因为dr["imgdata"]包含DBNull.Value,它不能直接转换为字节数组。使用强制转换之前,应先对DBNull.Value进行检查。

请注意,Convert.IsDbNull()返回bool的值,用它来检查if的内部条件,如下例所示:

if (!Convert.IsDbNull(dr["imgdata"]))
{
    imageUrl = "data:image/jpg;base64," + Convert.ToBase64String((byte[])dr["imgdata"]);
    // do other things
}
else
{
    // do something else
}

注意:

Convert.IsDBNull(imageUrl)是不必要的,因为应该使用string.IsNullOrEmpty()而不是Convert.IsDbNull()检查空字符串。