我一直在寻找解决方案,但不知道我在哪里做错了。但是我是第一次做。
我有班同学
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; } }
现在,我像这样通过表单传递属性值。
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"); }
我收到以下错误
从DbType System.Drawing.Bitmap到已知SqlCeType的映射不存在。
但是我不知道为什么我没有成功。任何建议将不胜感激。
尝试将图像转换为Byte[]数组,然后保存。
Byte[]
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; }
注意:您数据库中的数据image类型必须为type
image