C#在db中检索图像。获取错误参数无效

时间:2016-07-05 15:58:21

标签: c# image

我不知道我的代码在db中检索图像有什么问题。我插入图像而不使用图像路径文件导致图像由凸轮提供。

这是我在db

中插入图片的代码
Image img = pictureBox1.Image;
MemoryStream memStream = new MemoryStream();
img.Save(memStream, ImageFormat.Bmp);
byte[] imageBt = memStream.ToArray();
query = "";
query += "INSERT INTO table(picture) VALUES ('" + imageBt + "')";
cmd = new MySqlCommand(query, con);
cmd.ExecuteNonQuery();
con.close();

这是我在db

中检索图像的代码
query = "";
query += "SELECT picture FROM table WHERE id = '1'";
cmd = new MySqlCommand(query, con);
con.Open();
MemoryStream ms = new MemoryStream();
byte[] image = (byte[])cmd.ExecuteScalar();
ms.Write(image, 0, image.Length);
con.Close();
Bitmap bmp = new Bitmap(ms)
pictureBox1.Image = bmp; //Still get the Error here parameter is not valid

在数据库中保存图像是否有任何错误的过程。顺便说一下我在db中的图像类型是Blob。我不知道为什么它在检索图像时不起作用总是抛出错误。谢谢

1 个答案:

答案 0 :(得分:2)

阅读时,您无法重绕流。如果您Write,则必须事后设置ms.Position = 0;。或者更简单:从数据创建流,然后您不需要:

byte[] image = ...
var ms = new MemoryStream(image);

写作时,您似乎直接注入了数据。那...几乎肯定不会起作用 - 事实上,你可能正在写System.Byte[]命令。理想情况下,使用参数:

query = "INSERT INTO table(picture) VALUES (@blob)";
cmd = new MySqlCommand(query, con);
cmd.Parameters.AddWithValue("blob", imageBt);
cmd.ExecuteNonQuery();

(确切的语法可能会在RDBMS实现之间发生变化)