issei-kun
issei-kun

Reputation: 33

C# retrieving image in db. Get Error Parameter in not valid

I don't know what's wrong with my code in retrieving image in db. I insert image without using image path file cause the image provide by the cam.

Here's my code in inserting image in 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();

Here's my code in retrieving image in 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

Is there anywrong process in saving image in database. Btw my image type in db is Blob. I don't know why it doesn't work in retrieving image it always thrown error. Thanks

Upvotes: 1

Views: 599

Answers (1)

Marc Gravell
Marc Gravell

Reputation: 1062790

When reading, you haven't rewound the stream. If you Write, you must set ms.Position = 0; afterwards. Or simpler: create the stream from the data, then you don't need to:

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

When writing, you seem to have injected the data directly. That... almost certainly won't work - in fact, you're probably writing System.Byte[] to the command. Ideally, use a parameter:

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

(the exact syntax may change between RDBMS implementations)

Upvotes: 2

Related Questions