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

ASP.NET Discussion :

uploader un fichier dans une base SQL server


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut uploader un fichier dans une base SQL server
    Bonjour,

    je cherche un moyen d'uploader un fichier dans une base SQL server. Je sais creer une connexion vers ma base et y ecrire des données, mais comment faire lorsqu'il s'agit d'un fichier? Quelle requete dois-je lancer?

    Pour info je suis sous SQl server 2000, j'ai créé une base de données avec une colonne de type "binary" ( je suppose que c'est le bon type?), mais je n'ai pas la moindre idée de comment remplir cette colonne.

    Merci pour votre aide.

  2. #2
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    En quelques mots :

    tu ouvrir ouvrir ton fichier via un Stream (System.IO)
    Ensusite tu dois en faire un objet de type "tableau de Byte"
    Ce site correspond au type SQL binary (ou image)

    J'espere que cela t'ouvre une piste.
    Si ce n'est pas le cas dis le moi et je te ferai un petit exemple de code.

    Ludovic,

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Je ne répondrai pas directement à ton soucis, je te fais juste part d'un moyen de le contourner.

    Tu uploades le fichier sur ton serveur web, à l'endroit où tu veux, tu stockes cette adresse et c'est cette adresse que tu insére dans la BDD dans une colonne de type varchar.

    Personnellment, c'est la méthode que j'utilise pour le stockage et l'affichage dynamique de toutes les photos de mon site. Et je le fais aussi pour stocker des documents word, html, etc.

    Aprés, cela dépende évidemment de l'usage que tu feras de ces fichiers.

  4. #4
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    L'avantage dans le fait de le stocker directement dans la base de données et que le backup se fait tres simplement et pour toute ton application.

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Points : 459
    Points
    459
    Par défaut
    Bonjour,

    C'est une question intéressante que tu poses là .

    Je dirai qu'il faut :
    - Uploader le fichier sur le serveur
    - Puis un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Dim oStreamFichier As New IO.FileStream("fichier", IO.FileMode.Open)
                Dim oTabBytes(oStreamFichier.Length - 1) As Byte
                oStreamFichier.Read(oTabBytes, 0, oStreamFichier.Length - 1)
                'Insertion de oTabBytes avec une requete SQL
                '"INSERT INTO maTABLE (binaryColumn) VALUES ('" & oTabBytes.ToString() & "')"
    Bon courage

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Je suis donc le seul à privilégier le stockage sur serveur et l'inscription de l'adresse en base.

    Il est clair que niveau backup, le fait d'avoir le binaire en base directement est plus sécurisant.

    Par contre je pense qu'il est plus rapide d'extraire un varchar(100) d'une BDD qu'un fichier binaire dont la taille peut être élevée.

  7. #7
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Points : 459
    Points
    459
    Par défaut
    (Re)Bonjour,

    Rassures-toi, je stocke aussi l'url des fichiers dans la BDD et non pas le fichier entier. Quand au backup, il y a d'autre possibilités assez simples aussi

  8. #8
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Les deux méthodes ont leur charmes effectivement
    Mettre les fichiers directement dans la base de données peut également être un moyen de sécuriser leur accès ...

  9. #9
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Certes, mais il est tout de même simple de proteger un repertoire soit avec IIS soit avec les regles d'accés du membership du .net 2.0 gna

    En fait j'admet que la solution que j'utilise vient du fait que je n'ai jamais eu le courage de chercher plus loin

    je vais donc jeter un coup d'oeil prolongé à ce post, histoire d'apprendre, ce quine me fera pas de mal.

    (au passage, meme si ca n'a rien a faire avec le topic, merci ludovic pour ton tutoriel ultra simpliste sur la gestion des erreurs)

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Effectivement il parait plus simple, d'un point de vue programmation, de ne stocker qu'un lien vers le fichier dans la base de donnée.

    Cependant je souhaite avoir mon fichier en base de donnée pour pouvoir faire du reporting dessus, avec crystal reports je peux visualiser les pdf que j'ai inséré dans ma BDD. je n'ai donc pas vraiment le choix de la méthode. Ceci dit, ca me parait de toute maniere plus "propre" d'avoir tout dans ma base de données plutot que d'avoir des fichiers qui se baladent a droite a gauche.

    en cherchant sur internet j'ai fini par trouver un code que j'ai adapté. Ce code correspond a l'insertion du fichier selectionné dans le controle web <input type="file" id="TxtuploadFile"> vers une base de données comportant 2 colonnes : fichier et nom.

    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
                Dim myConnection As New SqlConnection("Data Source=server;Persist Security Info=True;User ID=moi;Password=")
     
                Dim imageBytes(TxtuploadFile.PostedFile.InputStream.Length) As Byte
                TxtuploadFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length)
     
                Const SQL As String = "INSERT INTO dbo.K2Data (fichier,nom) VALUES (@ImageData,@name)"
                Dim myCommand As New SqlCommand(SQL, myConnection)
     
                myCommand.Parameters.Add("@ImageData", SqlDbType.Image).Value = imageBytes
                myCommand.Parameters.Add("@name", SqlDbType.NVarChar).Value = "test"
                'Load FileUpload's InputStream into Byte array
     
     
     
                myConnection.Open()
                myCommand.ExecuteNonQuery()
                myConnection.Close()
    Ca marche, meme si je ne comprends pas tout ( par exemple, pourquoi utiliser un type qui s'appelle "image" dans ma base de données, et non pas binary. Moi je stocke pas des images...).

    Merci pour vos réponses, elles sont tout a fait pertinentes.

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-Server] Images dans une base SQL Server
    Par matrouba dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/03/2008, 10h34
  2. Réponses: 19
    Dernier message: 01/02/2008, 11h54
  3. Réponses: 3
    Dernier message: 27/07/2007, 13h06
  4. [ODBC] [SQL-Server] affichage d'une image stockée dans une base sql server
    Par ahlemag dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/06/2006, 15h45
  5. Réponses: 5
    Dernier message: 10/05/2006, 15h47

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