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 ]
Vous devez vous connecter pour publier un commentaire.
Essayer de convertir l'image à
Byte[]
tableau, puis enregistrer.Remarque: votre Type de données dans la base de données doit être
image
typeChech ce lien..
http://www.codeproject.com/Articles/25956/Sending-Receiving-PictureBox-Image-in-C-To-From-Mi
Avez-vous vraiment besoin de stocker l'image dans la base de données?
Vous pouvez réaliser cette tâche avec beaucoup moins d'effort si vous venez de stocker l'image dans un dossier(ai téléchargé votre application), puis stocker le chemin d'accès de l'image dans la base de données en "Varchar" sur le terrain.
J'ai travaillé plus sur les sites web, mais les principes de base doit être la même je pense....