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

Contribuez .NET Discussion :

[VB.Net] Comment stocker un .doc dans une BDD ? [Trucs & Astuces]


Sujet :

Contribuez .NET

  1. #1
    Membre du Club
    Profil pro
    csdcsdc
    Inscrit en
    Juin 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : csdcsdc

    Informations forums :
    Inscription : Juin 2004
    Messages : 83
    Points : 65
    Points
    65
    Par défaut [VB.Net] Comment stocker un .doc dans une BDD ?
    Bonjour,

    j'essaye en vain de stocker un document Word dans une colonne de BDD definie en image.

    J'ai déjà du mal a transformer le doc en une variable string ou autre apres lecture (j'ai essayé de lire le doc grace a des objets stream divers). J'en suis au stade de me demander si j'utilise la bonne approche.

    Mon besoin :
    - lire le fichier .doc et le transformer en un type de donnée que je pourrais passer en paramètre de sub et qui me permettra le dit stockage dans un champ image.
    - la manip inverse sera nécessaire, soit avec un champ image, reconstruire un doc éditable dans word.

    Si qqun a déjà rencontré ce genre de problématique, ca serait très cool.

    Merci pour toute piste

  2. #2
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    tu veux conserver ton document word comme il est avec le meme format puis apres pouvoir le reediter et ainsi de suite ...
    a ce moment la je te conseillerai plus de conserver le path vers chaque document car je ne crois pas qu'il existe des types (word ) dans les DB actuelles .

  3. #3
    Membre du Club
    Profil pro
    csdcsdc
    Inscrit en
    Juin 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : csdcsdc

    Informations forums :
    Inscription : Juin 2004
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Je te le concède, mais le but est ce stocker les doc en BDD afin de les rendre "transportables" sans avoir a se coltiner des transferts de fichiers multiples.

    Il va de soit que si je ne trouve pas de solutions, ta méthode deviendra la meilleure solution de replit.

    Merci pour ta réponse

  4. #4
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    ok je vois qu'il est possible d'ouvrir un document word sauvegarder au par avant avec le format xml.

    alors je te propose la chose suivante a fin de sauvegarder des documents words.

    les documents words en questions seront sauvegarder aux format xml (cela doit etre possible a laide de la reference sur object librairy de word ajouter en reference a ton projet) .

    une fois sauvegarder lit le contenu du xml et insert dans ta base de donne dans un type text (si nombre de caracter superieur a 8000 ce qui reste souvent le cas ) biensur insert le texte uniquement en utilisant tonxml.outerXml.

    ainsi le contenu de chacun de tes words sera conserver dans ta base de donnee


    pour les visualises il te restera a faire le chemin inverse .


    tiens moi au courrant .

  5. #5
    Membre du Club
    Profil pro
    csdcsdc
    Inscrit en
    Juin 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : csdcsdc

    Informations forums :
    Inscription : Juin 2004
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Tres ingénieux ... je vais tester de suite

  6. #6
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    merci et svp tiens moi au courant dans tous les cas

  7. #7
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Le problème de cette solution c'est qu'elle ne t'absout aucunement du problème de l'upload. Dans tout les cas, il te faudra faire un download du fichier à modifier, le modifier, le sauvegarder en local, et le réuploader.
    Si tu souhaites vraiment que tout cela soit transparent pour l'utilisateur, tu peux te tourner vers du webdav. Des solutions comme sharepoint services pourrait dès lors mieux te convenir.

    Sinon, tu peux toujours utilisé un champ de type binary dans ta base de données et son equivalent en code sera un byte[].

  8. #8
    Membre du Club
    Profil pro
    csdcsdc
    Inscrit en
    Juin 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : csdcsdc

    Informations forums :
    Inscription : Juin 2004
    Messages : 83
    Points : 65
    Points
    65
    Par défaut Procedure a suivre
    J'ai testé le mode xml, c'est assez facile et ca marche au poil.

    Mais je suis allé plus loin (stocker carrement le doc ds un champ image).

    Pour ceux que ca interesse, voila (un peu en vrac mais il y a tout) :

    a ) la table concernée doit avoir un champ image (bien sur).

    b ) créer une procedure 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
     
    /*
    **    Store an label category document
    **
    */
    create procedure dbo.StoreLabelDocument
        @LabelCategoryId int,
        @LabelCategoryDocument image
    as
        UPDATE PIPT_LabelCategories SET LAC_LabelCategoryDocument =
     @LabelCategoryDocument WHERE LAC_LabelCategoryId =
     @LabelCategoryId
    GO
    c ) Insertion d'un doc dans le champ image :

    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
    28
    29
    30
    31
    32
     
            Dim sCommand As String
            Dim ocmMyOleDBCommand As New OleDb.OleDbCommand
            Dim drMyOleDataReader As OleDb.OleDbDataReader
            Dim fsFileStream As FileStream
            Dim brBinaryReader As BinaryReader
            Dim lLength As Long
            Dim bytDocument() As Byte 
     
            fsFileStream = New FileStream("mon doc file", FileMode.Open,
     FileAccess.Read)
            lLength = fsFileStream.Length
            ReDim bytDocument(lLength)
            brBinaryReader = New BinaryReader(fsFileStream)
            brBinaryReader.Read(bytDocument, 0, lLength)
            brBinaryReader.Close()
            brBinaryReader = Nothing
            fsFileStream.Close()
            fsFileStream = Nothing
     
            Try
                With ocmMyOleDBCommand
                    .Connection = myOleBDConnexion
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "StoreLabelDocument"
                    .Parameters.Add("@LabelCategoryId", lLabelCategoryId)
                    .Parameters.Add("@LabelCategoryDocument", bytDocument)
                    .ExecuteNonQuery()
                End With
            Catch ex As OleDb.OleDbException
                MessageBox.Show("exc=" & ex.Message)
            End Try
    d ) lire la table et recréer le doc :
    Lire la table normalement et assigner le champ image a un byte()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonByteArray = monchamp
    puis pour écrire le doc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            fsFileStream = New FileStream("mon doc file", FileMode.Create)
            bwBinaryWriter = New BinaryWriter(fsFileStream)
            bwBinaryWriter.Write(MonByteArray , 0, MonByteArray.GetLength
    (0))
            bwBinaryWriter.Close()
            bwBinaryWriter = Nothing
            fsFileStream.Close()
            fsFileStream = Nothing
    Et voila. Je crois qu'il ne manque rien.

    Tchouss !

  9. #9
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    content pour toi
    si probleme de performance ce que dit cortex93 me semble a vrai dire plus a proprie ne connaissant pas sharepoint je ne pouvais y penser.

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

Discussions similaires

  1. Comment stocker un Bitmap dans une chaine XML ?
    Par Danny Blue dans le forum C#
    Réponses: 3
    Dernier message: 14/07/2008, 12h15
  2. Comment stocker un réel dans une base Access avec ADO ?
    Par thibouille dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/11/2007, 08h59
  3. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29
  4. Comment stocker un ficher dans une table postgres
    Par josoft dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/06/2003, 16h41

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