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

Développement SQL Server Discussion :

Insérer une image directement via une requete


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Points : 101
    Points
    101
    Par défaut Insérer une image directement via une requete
    Bonjour,

    Je cherche à insérer dans une BDD des images que j'ai en local.

    J'ai essayé ceci que j'ai trouvé sur le net mais je suis pas sur que ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE [dbo].[Table_1](
          [SelectedImages] [image] NOT NULL,
          [Path] [ntext] NOT NULL
    )
     
    to add an image, do this:
     
    INSERT INTO [testing].[dbo].[Table_1]
               ([SelectedImages]
               ,[Path])
         VALUES
               ('D:\desktop\05022006\free_chart1.gif' ,'D:\desktop\05022006\free_chart1.gif' )
    En effet, est-ce qu'il interprète réellement le path correctement ? ça me semble trop simple

    Merci

  2. #2
    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,

    Avec cette requête, vous avez stocké le chemin des fichiers, mais pas le contenu du fichier.
    Un fichier multimédia n'est pas une chaîne de caractères, donc cela ne peut pas fonctionner.
    D'autre part comme nous sommes dans un SGBDR, le moteur de celui-ci ne connaît que l'emplacement des fichiers des bases de données qu'il gère; il n'est nul besoin de lui faire connaître le reste du système de fichiers.

    Quelle version de SQL Server utilisez-vous ? Les types image et ntext sont obsolètes depuis l'introduction des types varbinary(max) et nvarchar(max) (et varchar(max)) avec SQL Server 2005, et suivants.
    Ils permettent en outre de manipuler de telles valeurs plus aisément, et le stockage de telles valeurs a été optimisé par rapport à SQL Server 2000.

    Pour réaliser ce que vous avez besoin de faire, il faut utiliser l'instruction OPENROWSET(BULK N'D:\desktop\05022006\free_chart1.gif', SINGLE_BLOB)

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Points : 101
    Points
    101
    Par défaut
    Merci ! je teste ça demain !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Points : 101
    Points
    101
    Par défaut
    Mais du coup dans le VALUES je mets tout ça ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        VALUES
               (OPENROWSET(BULK N'D:\desktop\05022006\free_chart1.gif', SINGLE_BLOB) )

    Il va pas y avoir plein d'erreur?

  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
    Au revoir la clause VALUES, bonjour SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO testing.dbo.Table_1
    (
    	SelectedImages
    	,Path
    )
    SELECT	BulkColumn
    	,'D:\desktop\05022006\free_chart1.gif'
    FROM	OPENROWSET(BULK N'D:\desktop\05022006\free_chart1.gif', SINGLE_BLOB) AS I
    Ce que l'on peut transformer en procédure stockée :

    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
    CREATE PROCEDURE usp_image_insert
    	@_image_path nvarchar(1024)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	DECLARE @sql nvarchar(2048)
    		, @cr nchar(2) = NCHAR(13) + NCHAR(10)
     
    	SET @sql = 'SELECT	BulkColumn' + @cr
    			+ '	, ''' + @_image_path + '''' + @cr
    			+ 'FROM	OPENROWSET(BULK N''' + @_image_path + ''', SINGLE_BLOB) AS I'
     
    	--PRINT @sql
     
    	INSERT INTO testing.dbo.Table_1
    	(
    		SelectedImages
    		, Path
    	)
    	EXEC sp_executesql @sql
    END
    Il suffit alors d'exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC dbo.usp_image_insert 'D:\desktop\05022006\free_chart1.gif'
    Il va pas y avoir plein d'erreur?
    A priori je dirai que non, mais le seul moyen d'en être sûr, c'est de tester

    @++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Points : 101
    Points
    101
    Par défaut
    Merci beaucoup pour tes précieuses informations

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Points : 101
    Points
    101
    Par défaut
    En fait j'ai une erreur

    avec cette requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO Famille
    (
    	logoFamille
     
    )
     
     
    SELECT	BulkColumn
     
    FROM	OPENROWSET(BULK N'C:\Users\a.rrt\Desktop\logos_web\logos_web\arri.png', SINGLE_BLOB) AS I
    Where idFamille ='8'
    Msg*4861, Niveau*16, État*1, Ligne*1
    Chargement en masse impossible car le fichier "C:\Users\a.rrt\Desktop\logos_web\logos_web\arri.png" est impossible à ouvrir. Code d'erreur du système d'exploitation 3(Le chemin d’accès spécifié est introuvable.).
    je suis pourtant sûr du chemin...

  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
    Est-ce qu'en collant le chemin dans l'explorateur Windows, Windows ouvre le fichier ?
    Je ne crois pas qu'il s'agisse d'un problème de permissions, sinon ce serait l'erreur 5 : Access is denied.

    D'autre part le WHERE idFamille ='8' ne fonctionnera pas puisque OPENROWSET ne retourne pas de colonne nommée idFamille

    @++

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je pense que les images sont le le PC client et la base de données sur un autre serveur, du coup le lien fichier ne fonctionne pas !

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/03/2014, 15h46
  2. [XL-2007] Création d'une image jpg via une Macro.
    Par djflnj dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/09/2010, 15h47
  3. Réponses: 4
    Dernier message: 19/06/2008, 15h41
  4. position dans une image (selection dans une image)
    Par kaiseresis dans le forum Images
    Réponses: 3
    Dernier message: 31/05/2008, 13h30
  5. Convertir une image jpeg en une image .ico. .
    Par sonja dans le forum Imagerie
    Réponses: 5
    Dernier message: 14/05/2007, 18h41

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