2

この問題を解決するにはどうすればよいですか? なぜイメージ ファイルが 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);
        }
    }

ここに画像の説明を入力

4

3 に答える 3

3

その列のデータベースからの戻り値が の場合NULL、これは in コードに変換さDBNull.Valueれます。

に正常にキャストされないため、これを確認する必要がありますbyte[]。このようなもの:

object val = row["Pictire"];

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

null の可能性があるすべての列に対して同様のチェックを行う必要があります。

于 2012-07-12T11:56:13.780 に答える
2

問題は、画像がないことですが、そのフィールドは空 (null) です。
dbnull 値を別のものにキャストすることはできません。
最初に が null かどうかを確認し、そうでない場合は に変換して読み取る必要がありますbyte[]

object pict = kategori["Picture"];
k.Resim =  (pict == DBNull.Value) ? new byte[0] : (byte[])pict;
于 2012-07-12T11:54:12.013 に答える
2

キャストする前に DBNull を確認する必要があります。

if( kategorie["Picture"] != DBNull.Value ) k.Resim = (Byte[])kategorie["Picture"];
于 2012-07-12T11:56:25.607 に答える