Upload image to SQL Database

c#, sql, sql-server-ce

Solution

Try converting the image to `Byte[]` array and then save.

 private void btnAdd_Click(object sender, EventArgs e)
 {
    Students myStudent = new Students();
    ...
    ...
    // change the student photo to byte array e.g. 
    // public byte[] Photo {get;set;}
    myStudent.photo = imageToByteArray(Image.FromFile(openFileDialog1.FileName));
    ...
    ...
    // Insert New Record
    if (myStudent.AddStudent(myStudent))
    MessageBox.Show("Student Added Successfully");
 }

 // convert image to byte array
 public byte[] imageToByteArray(System.Drawing.Image imageIn)
 {
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    return  ms.ToArray();
 }

//Byte array to photo
public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}

Note: your DataType in database must be `image` type

Problem

I have been looking at solutions but don't know where I am doing it wrong. But I am doing it for the first time. I have a class Students ``` class Students { public Image photo { get; set; } public bool AddStudent(Students _student) { Settings mySettings = new Settings(); SqlCeConnection conn = new SqlCeConnection(mySettings.StudentsConnectionString); SqlCeCommand cmd = new SqlCeCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = conn; cmd.CommandText = "insert into students (firstname, lastname, dob, allergic, allergydetails, memo, address, photo) " + "Values (" + "'" + @FirstName + "'," + "'" + @LastName + "'," + "'" + @Dob + "'," + "'" + @isAllergic + "'," + "'" + @AllergyDetails + "'," + "'" + @Memo + "'," + "'" + @photo + "'," + "'" + @Address + "')"; cmd.Parameters.Add("@FirstName", _student.FirstName); cmd.Parameters.Add("@LastName", _student.LastName); cmd.Parameters.Add("@Dob", _student.Dob); cmd.Parameters.Add("@isAllergic", _student.isAllergic); cmd.Parameters.Add("@AllergyDetails", _student.AllergyDetails); cmd.Parameters.Add("@Memo", _student.Memo); cmd.Parameters.Add("@photo", _student.photo); cmd.Parameters.Add("@Address", _student.Address); try { conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); return true; } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); return false; } finally { if (conn.State == System.Data.ConnectionState.Open) conn.Close(); cmd = null; } } ``` Now I pass the property values from my form like this. ``` private void btnAdd_Click(object sender, EventArgs e) { Students myStudent = new Students(); myStudent.FirstName = txtFirstName.Text.Trim(); myStudent.LastName = txtLastName.Text.Trim(); myStudent.Dob = dtPicker1.Value; myStudent.Memo = txtMemo.Text.Trim(); myStudent.Address = txtAddress.Text.Trim(); myStudent.photo = Image.FromFile(openFileDialog1.FileName); // Insert New Record if (myStudent.AddStudent(myStudent)) MessageBox.Show("Student Added Successfully"); } ``` I am getting the following error No mapping exists from DbType System.Drawing.Bitmap to a known SqlCeType. But I don't know why I am not succedding. Any Suggestion would be highly appreciated.

Original source

Related problems