Upload image to SQL Database

风格不统一 提交于 2019-12-11 02:13:56

问题


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.


回答1:


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




回答2:


Chech out this link..

http://www.codeproject.com/Articles/25956/Sending-Receiving-PictureBox-Image-in-C-To-From-Mi

Do you really have to store the image in database?

You can achieve this task with much less effort if you just store the image in a folder(have it uploaded to your application) and then store the path of that image in the database in "Varchar" field. I've worked more on websites but basics should be the same I think....



来源:https://stackoverflow.com/questions/18014465/upload-image-to-sql-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!