mohammed abd elgwad
mohammed abd elgwad

Reputation: 135

Reading Image from SQL Error in C#

I have a SQLite DB I have field called PersonalPic of Type BLOB

this is code in which I save image to SQLite

cm.CommandText = "insert into People(Name,FullName,FatherName,MotherName,NationalID,Mobile,Phone,Birth,Intma,Info,Address,CuAddress,PersonalPic,Pics) values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"','"+textBox4.Text+"','"+textBox5.Text+"','"+textBox6.Text+"','"+textBox7.Text+"','"+dateTimePicker1.Value.ToString("yyyy-MM-dd")+"','"+textBox8.Text+"','"+textBox9.Text+"','"+textBox10.Text+"','"+textBox11.Text+"','"+ConvertToString(personalpic)+"','"+ConvertToString(pic)+"')";
            cm.ExecuteNonQuery();



public string ConvertToString(String path)
        {
            FileStream fs = new FileStream(path,
            FileMode.OpenOrCreate, FileAccess.Read);
            byte[] rawData = new byte[fs.Length];
            fs.Read(rawData, 0, System.Convert.ToInt32(fs.Length));
            fs.Close();

            // Convert byte[] to Base64 String
            string base64String = Convert.ToBase64String(rawData);

            return base64String;
        }

It`s saved without no problems when I try to retrieve image it gives me Parameter is no valid Exception

SQLiteDataReader reader = cm.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {

                        textBox1.Text = reader["Name"].ToString();
                        textBox2.Text = reader["FullName"].ToString();
                        textBox3.Text = reader["FatherName"].ToString();
                        textBox4.Text = reader["MotherName"].ToString();
                        textBox5.Text = reader["NationalID"].ToString();
                        textBox6.Text = reader["Mobile"].ToString();
                        textBox7.Text = reader["Phone"].ToString();
                        dateTimePicker1.Value = DateTime.Parse(reader["Birth"].ToString());
                        textBox8.Text = reader["Intma"].ToString();
                        textBox9.Text = reader["Info"].ToString();
                        byte[] photoarray = (byte[])reader["PersonalPic"];
                        MemoryStream ms = new MemoryStream(photoarray);
                        MessageBox.Show(photoarray.Length.ToString());
                        ms.Position = 0;
                        pictureBox1.Image = Image.FromStream(ms);



                }
            }
            reader.Close();

Exception is in the Line (pictureBox1.Image = Image.FromStream(ms))

Please Help!!

Upvotes: 1

Views: 213

Answers (1)

Eoin Campbell
Eoin Campbell

Reputation: 44268

Aside from the horrendous sql inject insert statement, you're converting your picture byte array to a B64 string. And you're not converting it back on the other side. You're passing complete garbage data to your pictureBox. Either convert it back from byte[] -> B64 string and then decode it back to a byte[].. or just don't save it as a B64 string in the first place

Replace ConvertToString with ConvertToBlob

    public byte[] ConvertToBlob(String path)
    {
        FileStream fs = new FileStream(path,
        FileMode.OpenOrCreate, FileAccess.Read);
        byte[] rawData = new byte[fs.Length];
        fs.Read(rawData, 0, System.Convert.ToInt32(fs.Length));
        fs.Close();


        return rawData;
    }

And pass the raw data Byte[] directly to your SQL Query (which you need to rewrite as a parameterised query).

Upvotes: 2

Related Questions