C#从SQL加载图片至PictureBox失败,提示“参数无效”求助
问题原因及解决方案
问题出在图片存入SQL Server的代码中,存储的字节数组不完整或格式错误,导致读取时Image.FromStream无法解析,抛出"Parameter is not valid"错误。
错误点分析
- 字节数组长度计算错误:
img.Size.Height * img.Height是重复计算图片高度,完全不符合图片实际的字节大小,会导致数组长度与实际图片数据不匹配,无法容纳完整内容。 - 使用
tmpStream.Read()读取数据不可靠:该方法无法保证一次性读取所有流数据,容易丢失部分字节,造成图片数据损坏。
修正后的存入代码
Image img = Image.FromFile(opf.FileName); using (MemoryStream tmpStream = new MemoryStream()) { img.Save(tmpStream, System.Drawing.Imaging.ImageFormat.Png); // 直接从MemoryStream获取完整的字节数组 byte[] imageData = tmpStream.ToArray(); // 执行将imageData存入SQL Server的操作(建议用参数化查询避免注入) }
读取代码验证
你的读取代码本身无问题,只要存入的是完整的图片字节数据,以下代码可正常运行:
byte[] data = (byte[])(DT.Rows[0][18]); using (MemoryStream mem = new MemoryStream(data)) { pictureBox1.Image = Image.FromStream(mem); }
(用using包裹MemoryStream可确保资源正确释放)
内容的提问来源于stack exchange,提问作者user12235025
相关产品推荐
相关产品推荐

