資料庫 BLOB 欄位存入 23817 位元組,讀取時 byte[] bs = (byte[])dr[8] 僅得 255 位元組,導致圖片損壞無法顯示。
byte[] bs = (byte[])thisreader["image"].ToString(); // 錯誤:ToString() 將 byte[] 轉為 "System.Byte[]"
// 1. 直接強制轉型(推薦)
byte[] bs = (byte[])dr["image"]; // 或 dr.GetValue(8)
// 2. 處理 DBNull
byte[] bs = dr["image"] as byte[]; // 若為 NULL 返回 null
// 3. 顯式 GetBytes(大物件分塊讀取)
long len = dr.GetBytes(8, 0, null, 0, 0);
byte[] bs = new byte[len];
dr.GetBytes(8, 0, bs, 0, (int)len);
byte[] bs = (byte[])dr["image"];
using (MemoryStream ms = new MemoryStream(bs)) {
pictureBox1.Image = Image.FromStream(ms);
}
using (MemoryStream ms = new MemoryStream()) {
image.Save(ms, ImageFormat.Jpeg);
byte[] bs = ms.ToArray();
// 參數化 SQL: INSERT INTO t(img) VALUES (@img)
cmd.Parameters.Add("@img", MySqlDbType.Blob).Value = bs;
}