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 :

Impossible de lire un fichier stocké en BDD


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut Impossible de lire un fichier stocké en BDD
    Bonjour à tous,

    J'ai une table dans ma base ou je dois stocké un fichier.

    L'insertion se passe sans problème, mais lors de l'ouverture je remarque d'abord que j'ai une différence de taille, par la suite quand j'essaie d'ouvrir le .MSG avec outlook, une erreur survient.

    Impossible d'ouvrir le fichier ... Le fichier n'existe peut-etre pas, vous n'avez pas l'autorisation de l'ouvrir, ou il est peut être ouvert dans un autre programme ...
    Voici la méthode que j'utilise pour récupérer le fichier :

    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
    byte[] msg = null;
     
                using (DbCommand cmd = cnx.CreateCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "SELECT FICHIER_MSG FROM ETUDE";
     
                    using (DbDataReader reader = cmd.ExecuteReader())
                    {
                        if(reader.Read())
                        {
                            int taille = ((Byte[])reader["FICHIER_MSG"]).Length;
                            msg = new byte[taille];
                            msg = reader["FICHIER_MSG"] == DBNull.Value ? default(Byte[]) : (Byte[])reader["FICHIER_MSG"];
                        }
                    }
                }
    Si quelqu'un a une piste

    Merci d'avance
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Quel DBMS ?

    Comment (de quel type) est déclarée ta colonne de stockage ?

  3. #3
    Membre expérimenté
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Par défaut
    As tu correctement fermé ta connexion ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Bonjour

    Quel DBMS ?

    Comment (de quel type) est déclarée ta colonne de stockage ?
    Bonjour,

    Effectivement ça peut aider
    MS SQL Server 2005.
    Et la colonne est de type varbinary(MAX)

    Merci
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ok. Peux tu poster ton code d'insertion ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Ok. Peux tu poster ton code d'insertion ?
    Le voici :

    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
            public void AddReponse(Reponse reponse)
            {
                using (DbConnection cnx = SqlFactory.Instance.GetSqlConnection())
                {                
                    AddReponseInDB(reponse, cnx);
                }
            }
     
            private void AddReponseInDB(Reponse reponse, DbConnection cnx)
            {
             using (DbCommand cmd = cnx.CreateCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
     
                    cmd.CommandText = "INSERT INTO ETUDE VALUES(@Id_Four, @ID_De, @Date_Arr, @FICHIER_MSG , @Com)";
                    cmd.Parameters.Add(new SqlParameter("@ID_De", reponse.IdD));
                    cmd.Parameters.Add(new SqlParameter("@Id_Four", reponse.IdFour));
                    cmd.Parameters.Add(new SqlParameter("@Date_Arr", reponse.DateAr));
                    cmd.Parameters.Add(new SqlParameter("@FICHIER_MSG ", reponse.FICHIER_MSG));
                    cmd.Parameters.Add(new SqlParameter("@Com", reponse.Com));
     
                    cmd.ExecuteNonQuery();
                }
            }
    Avec FICHIER_MSG de type Byte[].
    Je le récup en utilisant fichierUpload du côté UI.

    Merci à toi.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  7. #7
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Regarde si ce que je te propose est correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     if (FUPieceJointe.HasFile)
            {
                HttpPostedFile file = FUPieceJointe.PostedFile;
                BinaryReader br = new BinaryReader(file.InputStream);
                Byte[] fichier = br.ReadBytes(file.ContentLength);
    Tu fais ton insert dans la colonne adéquate de la table en prenant comme type, le type binary.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DbParameter FichierParam = myFac.CreateParameter("@Fichier", DbType.Binary, ParameterDirection.Input, fichier);
    Ensuite pour le récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Byte[] recup = (Byte[])myFac.ExecuteScalar(cmdSelect);
    Par contre avec les recherches que j'avais faite il faut l'enregistrer localement sur le pc afin de l'ouvrir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     FileStream fs = new FileStream("c:\\..." + reader["NomFichier"], FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
                    fs.Write(recup, 0, recup.Length);
                    fs.Close();
    et après tu peux rajouter un ClientRegisterScript.

    A voir,

    j'espère que cela peut régler ton problème.

    En SQL Server 2005, le type est le type image!!!

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par tortuegenie Voir le message
    Regarde si ce que je te propose est correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     if (FUPieceJointe.HasFile)
            {
                HttpPostedFile file = FUPieceJointe.PostedFile;
                BinaryReader br = new BinaryReader(file.InputStream);
                Byte[] fichier = br.ReadBytes(file.ContentLength);
    Tu fais ton insert dans la colonne adéquate de la table en prenant comme type, le type binary.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DbParameter FichierParam = myFac.CreateParameter("@Fichier", DbType.Binary, ParameterDirection.Input, fichier);
    Ensuite pour le récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Byte[] recup = (Byte[])myFac.ExecuteScalar(cmdSelect);
    Par contre avec les recherches que j'avais faite il faut l'enregistrer localement sur le pc afin de l'ouvrir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     FileStream fs = new FileStream("c:\\..." + reader["NomFichier"], FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
                    fs.Write(recup, 0, recup.Length);
                    fs.Close();
    et après tu peux rajouter un ClientRegisterScript.

    A voir,

    j'espère que cela peut régler ton problème.

    En SQL Server 2005, le type est le type image!!!
    Ce n'est pas exactement ce que je veux faire (je veux pas sauvegarder le fichier en temp) surtout qu'une fois que j'ai le Byte[] je sais l'ouvrir.

    J'ai testé le Byte[] avant l'insertion dans la base de données et je l'ouvre très bien. Mais quand je l'enregistre en base et le réouvre il ne marche plus ...
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 88
    Par défaut
    Ca ne fait pas beaucoup avancer les recherches, mais il me semble que tu n'as pas besoin du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msg = new byte[taille];
    puisque tu change ta référence par la suite.

    Sinon, as-tu essayé de faire une copie ce tableau ? Afin que les données soient vraiment complètement indépendantes de celles de la BD ?

    Bonne journée

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    J'ai fais plusieurs tests avec ce qui m'a été proposé, mais ça ne résoud pas le problème.
    Si quelqu'un à une idée.

    Merci encore.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut




    C'est tous ce que je mérite pour la peine je vais rentrer chez moi.
    Euh au faite mon erreur était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FICHIER_MSG FROM ETUDE
    Si je précise pas l'id du MSG j'ai tous les fichier_msg ... Forcément ça merde ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FICHIER_MSG FROM ETUDE WHERE ID_MSG=@ID_MSG
    Comme quoi il faut toujours, toujours testé ses requêtes ...

    D'ailleurs comment ça se fait qu'il n'a pas renvoyé une erreur ou exception ?
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

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

Discussions similaires

  1. impossible de lire un fichier FLV
    Par db48752b dans le forum Flash
    Réponses: 0
    Dernier message: 25/03/2009, 14h21
  2. [Wamp] Impossible de lire les fichiers php dans le répertoire www de localhost
    Par eddflo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 28/01/2009, 00h39
  3. Impossible de lire les fichiers AVI créés par OpenCV
    Par cjacquel dans le forum OpenCV
    Réponses: 1
    Dernier message: 12/01/2009, 11h51
  4. Réponses: 1
    Dernier message: 19/12/2005, 17h09

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