System.DBNull错误

时间:2012-07-12 11:52:19

标签: c#

如何解决此问题?为什么图像文件制作system.dbnull错误?

    private void Form1_Load(object sender, EventArgs e)
    {
        SqlDataAdapter da = new SqlDataAdapter("select * from Categories", baglantiYolu);
        DataTable tablo = new DataTable();
        da.Fill(tablo);
        foreach (DataRow kategori in tablo.Rows)
        {
            Kategori k = new Kategori();
            k.KategoriID = int.Parse(kategori["CategoryID"].ToString());
            k.KategoriAdı = kategori["CategoryName"].ToString();
            k.UrunSayisi = UrunSayisiniGetir(int.Parse(kategori["CategoryID"].ToString()));
            k.Aciklama = kategori["Description"].ToString();
            k.Resim = (byte[])kategori["Picture"];
            listBoxKategoriler.Items.Add(k);
        }
    }

enter image description here

3 个答案:

答案 0 :(得分:3)

如果该列的数据库的返回值为NULL,则会转换为代码中的DBNull.Value

您需要检查此内容,因为它无法成功投放到byte[]。像这样:

object val = row["Pictire"];

if (val == DBNull.Value || val == null)
{
    k.Resim = new byte[0];
}
else
{
    k.Resim = (byte[])val;
}

您需要对所有可能为空的列执行类似的检查。

答案 1 :(得分:2)

问题是你没有图像,但该字段为空(null) 您不能将dbnull值转换为其他值 首先,您必须检查是否为null,如果没有,则将其转换为byte[]

object pict = kategori["Picture"];
k.Resim =  (pict == DBNull.Value) ? new byte[0] : (byte[])pict;

答案 2 :(得分:2)

您需要在投射前检查DBNull:

if( kategorie["Picture"] != DBNull.Value ) k.Resim = (Byte[])kategorie["Picture"];