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.