如何解决此问题?为什么图像文件制作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);
}
}
答案 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"];