Charger l'image de Base de données SQL

J'ai cherché des solutions mais ne sais pas où je suis de faire le mal. Mais je le fais pour la première fois.

J'ai une classe d'Étudiants

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;
}
}  

Maintenant je passe les valeurs de propriété à partir de mon formulaire, comme ceci.

  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");
}

J'obtiens l'erreur suivante

Pas de mapping existe de DbType Système.De dessin.Bitmap à un
SqlCeType.

Mais je ne sais pas pourquoi je ne suis pas succedding. Toute Suggestion serait très appréciée.

  • vous avez besoin de convertir votre image à un byte[], il peut alors être stocké dans un type de données d'image msdn.microsoft.com/en-us/library/ms172424.aspx
  • De mon expérience, sa fait du bien de faire cela... vous devez utiliser un champ BLOB dans la base de données et diffuser l'image de tableau d'octets, avant de le mettre dans le champ BLOB.
  • Vous ne comprenez pas, ma question est différente. Je garde la photo dans une instance de la classe de première puis de la charger sur la db. En l'occurrence, je n'ai pas de fonctionnalités comme openfiledialog.nom de fichier etc.
  • Il vous est possible de télécharger des images vers un MS de Base de données, mais assurez-vous que les images sont de mauvaise qualité(vignettes), car il va ralentir votre base de données. Stocker les images sur un serveur et de mettre les chemins vers les images comme une chaîne de caractères dans votre base de données pour charger vos images.
  • Bon commentaire. Merci je vais garder cela à l'esprit. Mais il le rendre différent Si je suis à l'aide de SQL Compact CE ? Je suis maintenant l'exception de La conversion n'est pas pris en charge. [ Type de convertir (si connue) = nvarchar, Type convertir (si connue) = binary ]
InformationsquelleAutor Ath An | 2013-08-02