IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

inserer une image dans sql server


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 125
    Points : 90
    Points
    90
    Par défaut inserer une image dans sql server
    bonjour ,
    je cherche à insérer des images dans une base de données sql server mais je ne sais pas comment procéder.
    pour plus d'explication, j'ai une table ayant un champ "picture" avec un type image et je veux récupérer ces images et les afficher à un utilisateur.
    Comment introduire ce images dans la base en premier lieu et comment les récupérer aprés de la base et les afficher via une interface wpf ou desktop ou WP7?

    j'utilise visual studio 2010 et Sql Server 2008 et mon langage de programmation est C#.

    Merci de m'aider.

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Le type image est déprecié... remplacez le par le type varbinary(max)
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Tout d'abord il faut considérer le poids moyen de vos images, ainsi que leur nombre.
    Si vous êtes certain qu'elles feront majoritairement chacune plus d'1 Mo, vous devriez utiliser la fonctionnalité FileStream de SQL Server 2008.
    Mikedavem a écrit un bon tutoriel là-dessus.

    Dans tous les cas votre table devra contenir une colonne de type varbinary(max).

    Ensuite pour charger l'image, la meilleure solution pour vous me semble être de récupérer à partir de votre application C# (désolé je suis un profane en C#) le flux binaire représentant votre image, et de le passer en paramètre à une procédure stockée T-SQL.

    Pour vous donner un exemple, supposons la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE tb_image
    (
    	image_id uniqueidentifier NOT NULL CONSTRAINT PKtb_image PRIMARY KEY CONSTRAINT DFtb_image__image_id DEFAULT NEWSEQUENTIALID()
    	, image_document varbinary_max FILESTREAM NOT NULL
    	, filename nvarchar(255) NOT NULL
    )
    La procédure stockée serait alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    CREATE PROCEDURE sp_insert_image
    	@_image_document varbinary(max)
    	, @_image_filename nvarchar(255)
    	, @image_id uniqueidentifier = NULL OUTPUT
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	DECLARE @t TABLE
    	(
    		image_id uniqueidentifier
    	)
     
    	INSERT	INTO dbo.tb_image
    	(
    		image_document
    		, image_filename
    	)
    	OUTPUT	inserted.image_id INTO @t
    	SELECT	@_image_document
    		, @_image_filename
     
    	SELECT	@image_id = image_id
    	FROM	@t
    END
    Et une utilisation serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE	@image_id uniqueidentifier
     
    EXEC	sp_insert_image
    		0x0000
    		, 'C:\toto.jpg'
    		, @image_id = @image_id OUTPUT
     
    SELECT	@image_id
    Vous pouvez aussi, comme le suggère Mikedavem dans son tutoriel, passer en paramètre le chemin du fichier image, et laisser SQL Server le récupérer pour vous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    ALTER PROCEDURE	sp_insert_image
    	@_image_filename nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	DECLARE	@sql nvarchar(1024)
     
    	SELECT	@sql = 'SELECT	CAST(BulkColumn AS varbinary(max)), @_image_filename_IN'
    	+ ' FROM OPENROWSET(BULK ''' + @_image_filename + ''', SINGLE_BLOB) AS img'
     
    	PRINT	@sql
     
    	INSERT	INTO dbo.tb_image
    	(
    		image_document
    		, image_filename
    	)
    	EXEC	sp_executesql
    			@sql
    			, N'@_image_filename_IN nvarchar(255)'
    			, @_image_filename_IN = @_image_filename
     
    	SELECT	image_id
    	FROM	dbo.tb_image
    	WHERE	image_filename = @_image_filename
    END
    Et une utilisation serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC	sp_insert_image 'C:\test.jpg'
    @++

  4. #4
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Quant à le récupérer en C# aucun soucis... tu devras juste utiliser de mémoire un memorystream pour le convertir en flux pour générer ton image dans un site par exemple...

    Tu devrais trouver aisément des exemples d'exploitation de ce genre de données sur le WEB.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Je penche (j'en tombe même ) pour la solution d'iberserk

    @++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 125
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Le type image est déprecié... remplacez le par le type varbinary(max)
    Pourquoi le type iùage est éprecié?

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 964
    Points
    52 964
    Billets dans le blog
    6
    Par défaut
    les types image ntext, text sont déprécié et seront supprimé dans une future version.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Et ont déjà été remplacés par des types bien plus simples à manipuler, respectivement à la liste de SQLPro : varbinary(max), nvarchar(max) et varchar(max).
    Cela depuis la version 2005 de SQL Server, où le stockage de valeurs sous de tels types a été optimisé et permet dès SQL Server 2008 de profiter de la fonctionnalité FileStream.

    @++

Discussions similaires

  1. [Débutant] inserer une image dans SQL SERVER VIA VS 2008
    Par justintak dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/11/2011, 18h36
  2. [PHP 5.0] Probleme d'affichage d'une image dans SQL SERVER
    Par stentorus dans le forum Langage
    Réponses: 2
    Dernier message: 23/08/2010, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo