Stocker l'image dans la base de données et de les récupérer
Mon code pour insérer une image dans la base de données est comme suit:
MemoryStream ms =new MemoryStream();
byte[] PhotoByte=null;
PhotoByte=ms.ToArray();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
PhotoByte =ms.ToArray();
Str = "insert into Experimmm Values('" + PhotoByte + "','" + textBox1.Text + "')";
Conn.Open();
cmd.Connection = Conn;
cmd.CommandText = Str;
cmd.ExecuteNonQuery();
Conn.Close();
Qui va bien. Je peux voir des données binaires dans ma table de base de données comme <Binary Data>
Mon code pour la récupération des données est:
Str ="select * from Experimmm where id = '" +textBox2.Text + "'";
Conn.Open();
cmd.Connection = Conn;
cmd.CommandText = Str;
dr = cmd.ExecuteReader();
if (dr.Read())
{ label1.Text = dr.GetValue(1).ToString();
byte[] PhotoByte = (byte[])dr.GetValue(0);
MemoryStream mem = new MemoryStream(PhotoByte, 0, PhotoByte.Length);
//but an error takes place on next line "Parameter is not valid."
pictureBox2.Image = Image.FromStream(mem);
} Conn.Close();
Je suis à l'aide de visual studio 10 , C# ,sql server 2005
- PLZ Stocker des chemins plutôt que des images - alors vous n'aurez pas besoin de tout cela.
- le paramètre n'est pas valide? Merci de poster l'intégralité de l'exception au lieu de paraphraser il.
- Mes yeux! Ils sont la gravure!
- monsieur, j'ai pour stocker des images, parce que je veux les utiliser dans crystal report dynamiquement... merci à JonH pour une réponse rapide
- possible en double stackoverflow.com/questions/5285213/...
- John Saunders @pictureBox2.Image = Image.FromStream(mem); "mem" est le paramètre
- Le temps de lire BLOB ou de ne pas BLOB, je pense.
- Depuis il ne semble pas que quelqu'un d'autre a mentionné, il est temps pour échanger de concaténation de chaîne avec une requête paramétrée. Des injections SQL sont pas amusant.
- cette question n'a rien à propos des bases de données. Même pas près d'être un doublon.
- oooooo me dire que dois-je faire..???
- ah. ! j'ai dit que possible. nyway 😀
Vous devez vous connecter pour publier un commentaire.
Il est possible bien sûr pour stocker vos images en db. Cependant, il n'est pas recommandé. Il est préférable de les stocker dans un système de fichiers.
Votre code est un peu brouillon. Ce qui suit est un meilleur exemple.
Lorsque vous récupérez, vous pourriez utiliser un binaire écrivain dans certains gestionnaire
System.Web
Vous avez plusieurs problèmes avec votre code. Je vais répondre à ça, ligne par ligne:
Alors que ce n'est pas un problème, vous avez inutile affectations ici. Le code ci-dessus pourraient être plus clairement écrit de cette manière:
Ensuite, le code suivant n'est pas à l'aide de paramètres. Toujours, toujours, toujours paramétrer vos requêtes SQL au lieu dynamique de la construction de la SQL. Non, sérieusement, toujours. Oui, même alors. (D'ailleurs, qu'est-ce que le
Str
variable? Une sorte de réutilisés variable d'instance? Ne pas le faire.)Au lieu de cela, il devrait être ceci:
Prochaine, nous allons nous installer sur votre récupération. De nouveau avec le
Str
variable, ne pas faire ce genre de chose. Aussi, vous devez paramétrer cette requête ainsi.Vous devriez être en utilisant un requête paramétrée au lieu de concaténer une chaîne SQL.
En dehors de la fixation de l'évidence L'Injection SQL vulnérabilité, ce qui vous permettra de bien insérer une image dans la base de données.
Il y a beaucoup de questions et de réponses sur comment insérer dans un SQL Server image/champ binaire - vous devriez les regarder.