Insertion / recuperation d'image stockee dans une db ms sql server 2000

Soyez le premier à donner votre avis sur cette source.

Vue 30 143 fois - Téléchargée 3 493 fois

Description

Bonjour,

Ce petit bout de code fait avec visual studio 2003 (C#) permet de voir comment insérer et récuperer des images stockées dans la base de données.

Il vous suffit afin de le faire tourner de créer la db d'exmple et de creer la procédure stockée qui enregistre l'image dans la db et de placer vos paramètres de connection au serveur ms sql.
La structure de la db et la procédure se trouvent dans le fichier info.txt.

Ensuite, ouvrez le projet et allez modifier le fichier web.config en y plaçant votre chaine de connection au serveur sql.

<add key="Connect" value="VOTRE CONNECTION STRING"></add>

Lancer ça tourne...

Source / Exemple :


private void save(string nomcomplet)
		{

			//Avec la class FileInfo on peut recuperer la taille de l'image
			FileInfo fiImage=new FileInfo(nomcomplet);
			
			//On declare un tableau de la taille de l'image
			this.m_lImageFileLength=fiImage.Length;
			m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
			
			//Avec l'objet FileStream on remplit le tableau de byte
			FileStream fs = new FileStream(nomc,FileMode.Open,FileAccess.Read,FileShare.Read);
			int iBytesRead=fs.Read(m_barrImg,0,Convert.ToInt32(this.m_lImageFileLength));
			fs.Close();

			//On ouvre la connection 
			SqlConnection myConnection = new SqlConnection();
			myConnection.ConnectionString = ConfigurationSettings.AppSettings["Connect"];
 
			//On specifie que c'est une procedure stockee
			SqlCommand myCommand = new SqlCommand("SP_StockImage",myConnection);
			myCommand.CommandType = CommandType.StoredProcedure;

			//Parametre
			myCommand.Parameters.Add("@Name", SqlDbType.VarChar, 50);
			myCommand.Parameters.Add("@Picture", SqlDbType.Image);

			//Les valeurs pour les parametres de la procedure stockee
			myCommand.Parameters["@Name"].Value = Label1.Text;
			myCommand.Parameters["@Picture"].Value = m_barrImg;

			//Parametre de sortie
			SqlParameter renvoitID = new SqlParameter("@ID_Recup",SqlDbType.Int, 4);
			renvoitID.Direction = ParameterDirection.Output;
			myCommand.Parameters.Add(renvoitID);
			
			//Open connection
			myConnection.Open();

			//execution de la procedure stockee
			int id = Convert.ToInt32(myCommand.ExecuteScalar()); 

			//Close connection
			myConnection.Close();

			//On redirige
			Response.Redirect("Affiche.aspx?lastID="+id);
		}

Conclusion :


Bonne journée
Christophe

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
8 nov. 2006 à 03:46
Salut

Petite question :
Pourquoi mettre un paramettre de retour et utiliser ExecuteScalare ?
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 1
9 nov. 2006 à 16:37
salut salut Malkuth,

Mhhh oui tu as raison en fait executescalar() renvoit un parametre !

a essayer mais en ce moment je fais autre chose mais des que j'ai des news je dis quoi !

par contre si tu sais m'en dire plus n'hesites pas mec !

Bonne fin de semaine
Christophe
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
9 nov. 2006 à 17:14
Normalement Execute Scalar revoi le premier champ du premier enregistrement de la premiére selection renvoyer,

J'ai siament attirer ton attention dessus parce que j'ai eu un problème il ya qq temps, je faisait un return 1; ou un return 0; a la fin d'une procédure stocké sur SQL serveur et au moment de récupérer la valeur de retour : Pas moyen de tomber dessus avec ExecuteScalar!!! Et ca me semblai tellement logique pourtant que j'ai mis un moment avant de comprendre que le problème venai pas de la procédure stocké mais de l'utilisation de ExecuteScalar.

En remplacant Return 1; ou Return 0; par SELECT 1;/SELECT 0; ca marchait nickel. Mais il ne faut pas renvoyer de selection avant...

Désormai je passe par les table adaptateur dans les dataset, plus je l'ai utilise plus je les trouve pratique (J'ai mis jusqu'a 25 Procédure stocké sur un seule table adaptateur, l'avantage c'est qu'on travaille directement avec une fonction qui gere les parametre out comme des byref et renvoi direct un DataTable, Le seul hic c'est quand on renvoi plusieur table depuis la procédure stocké.


Voilou A +
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 1
10 nov. 2006 à 08:36
salut salut Malkuth,

Je te remercie pour ces infos, je voye que tu as l'air de bien connaitre le developpement !Moi je debute dans le developpement..

N'aurais tu pas des articles ou des exemples sur comment realiser un setup d'installation !? Je prepare une source la dessus mais je suis en manque d'exemple concret!

Je te remercie
Christophe
spidermario Messages postés 121 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 14 mars 2009 1
4 déc. 2006 à 17:54
C'est une source .Net, ça, non ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.