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

Windows Forms Discussion :

Upload Fichier + Insert Mysql + Listbox


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut Upload Fichier + Insert Mysql + Listbox
    Salut,

    J'ai une Listbox ou je fais du DragDrop.
    Celle-ci m'affiche le chemin du fichier.

    Avec le bouton save je voudrais uploader pour chaque lien le fichier mais je trouve pas la soluce

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Imports MySql.Data.MySqlClient
    Imports System.Configuration
    Imports System.IO
    Public Class Form2
        Dim MysqlConn As MySqlConnection
        Dim COMMAND As New MySqlCommand
        Dim READER As MySqlDataReader
        Private Sub Form2_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
            Dim droppedItems As String() = e.Data.GetData(DataFormats.FileDrop)
            For Each file In droppedItems
                Dim filename = GetFileName(file)
                ListBox1.Items.Add(filename)
                'MessageBox.Show("You Dropped " + filename)'
            Next
     
        End Sub
     
        Private Sub Form2_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter
            If e.Data.GetDataPresent(DataFormats.FileDrop, False) = True Then
                e.Effect = DragDropEffects.All
            End If
        End Sub
     
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            MysqlConn = New MySqlConnection(ConfigurationManager.ConnectionStrings("xCollectibles.My.MySettings.xcollectiblesConnectionString").ToString)
        End Sub
     
        Public Function GetFileName(path As String)
            'Return System.IO.Path.GetFileNameWithoutExtension(path)'
            Return System.IO.Path.GetFullPath(path)
        End Function
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim conn As MySqlConnection
     
            conn = New MySqlConnection(ConfigurationManager.ConnectionStrings("xCollectibles.My.MySettings.xcollectiblesConnectionString").ToString)
     
     
            Try
                conn.Open()
            Catch Myerror As MySqlException
                MsgBox("Error connection to the database!")
     
            End Try
            Dim adapter As New MySqlDataAdapter
            Dim sqlquery = "insert into xcollectibles.foto (foto) values (@foto)"
            Dim myCmd As New MySqlCommand
            myCmd.Connection = conn
            myCmd.CommandText = sqlquery
            myCmd.Parameters.AddWithValue("@foto", ListBox1.Items)
     
     
            adapter.SelectCommand = myCmd
            Dim mydata As MySqlDataReader
            mydata = myCmd.ExecuteReader
     
            For Each item In ListBox1.Items
     
            Next
     
     
        End Sub
    End Class
    Merci de votre aide....

  2. #2
    Membre chevronné
    Avatar de nouanda
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mai 2002
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mai 2002
    Messages : 246
    Par défaut
    Bonjour,

    Quelques remarques générales:
    • Tu déclares 2 fois la connexion à ta base MySQL (dans Form2_Load, puis dans Button1_Click).
    • Il est de bonne pratique d'utiliser la directive Using pour les connexions aux BDD ( et pour les objets qui implémentent IDisposable en général).
    • Il est d'encore meilleure pratique de séparer les couches de ton application: au moins une pour l'interface, une pour les actions de base de données. Crée une nouvelle classe pour gérer cela.
    • Pour faire un INSERT, tu n'as pas besoin d'adapter ni de reader. Tu prépares ta commande, et tu utilises ExecuteNonQuery(). Regarde cet exemple, à la fois pour using et pour executenonquery.



    Le plus important: tu veux mettre quoi dans ta base? seulement le nom du fichier ou tout son contenu? quel est le type de ta colonne foto? Egalement, combien d'objets penses-tu que l'utilisateur voudra uploader en un lot (cela influera sur la méthode à choisir: peu d'objets = un INSERT par objet, facile à mettre en oeuvre mais peut être plus lent, beaucoup d'objets = un INSERT pour tous, plus rapide mais plus difficile à mettre en oeuvre, surtout avec des blobs).

    Regarde ici un exemple d'insert par lot. C'est en C#, mais tu convertiras facilement en VB.

    Et pour finir, je pense que tu auras plus de chances si tu poses ta question sur le forum VB.NET. Certes, c'est une application Winforms, mais cela concerne plus le langage que l'interface.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    Citation Envoyé par nouanda Voir le message

    Le plus important: tu veux mettre quoi dans ta base? seulement le nom du fichier ou tout son contenu? quel est le type de ta colonne foto? Egalement, combien d'objets penses-tu que l'utilisateur voudra uploader en un lot (cela influera sur la méthode à choisir: peu d'objets = un INSERT par objet, facile à mettre en oeuvre mais peut être plus lent, beaucoup d'objets = un INSERT pour tous, plus rapide mais plus difficile à mettre en oeuvre, surtout avec des blobs).
    En fait quand je glisse le ou les fichiers dans le listbox, il met le lien du fichier du genre "c:\mes images\image.jpg" d'ou le Return System.IO.Path.GetFullPath(path)

    Le bouton save envoi image.jpg qui est dans la listbox se trouvant dans "c:\mes images\image.jpg".
    Si la listbox a plusieurs items du genre, "c:\mes images\image1.jpg", "c:\mes images\image2.jpg", etc.....
    Ainsi il sauvegarde tous les fichiers dans la BD. En général c'est maxi 40 photos d'un coup. Et oui c'est Blob. C'est pour éviter de mettre une image une par une. Je crois que ma méthode pour insérer n'est pas correct sa j'en suis sure. J'ai beau chercher sur divers forum et je vois personne utiliser cette méthode.

    Merci.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    Si c'est pour une grosse quantité d'image je ne conseillerais pas de faire du blob. Les blobs c'est bien mais on peut souvent faire mieux plus simplement, disons qu'il faut que ce soit bien réfléchit.
    Ainsi tu pourrais avoir un dossier accessible sur ton serveur que te serviras à sauvegarder tes fichiers. Tu pourrais directement copier le fichier lors du drag and drop, et un GetFiles(..) te fourniras la liste des fichiers présents.
    Maintenant tu peux également te servir en parallèle de ta bdd pour stocker le nom des fichiers et faire un peu de gestion.

    Tu as peut être de très bonne raison de faire avec des blobs, et ça marcheras sans problème. Mais souvent c'est beaucoup plus simple de passer par le système de fichier (qui en faite est une bdd spéciale fichiers quelques part )

    Bon code,
    J@ck.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    Ou alors quelqu'un peu me dire comment uploader plusieurs fichiers d'un coup dans une DB avec vb net ?
    Je suis preneur

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Citation Envoyé par nouanda Voir le message
    [..]
    • Pour faire un INSERT, tu n'as pas besoin d'adapter ni de reader. Tu prépares ta commande, et tu utilises ExecuteNonQuery(). Regarde cet exemple, à la fois pour using et pour executenonquery.
    [..]
    Attention, superthx possède un clavier incapable de saisir ExecuteNonQuery.

    Allez, bonne chance à superthx ... et aussi aux helpers

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Attention, superthx possède un clavier incapable de saisir ExecuteNonQuery.

    Allez, bonne chance à superthx ... et aussi aux helpers
    Hahaha, meme pas drôle.

    Sérieux j'ai essayer ExecuteNonQuery et c'est surligneur en rouge comme quoi sa merde.

    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
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                MysqlConn.Open()
            Catch Myerror As MySqlException
                MsgBox("Error connection to the database!")
    
            End Try
            Dim adapter As New MySqlDataAdapter
            Dim sqlquery = "insert into xcollectibles.foto (foto) values (@foto)"
            Dim myCmd As New MySqlCommand
            myCmd.Connection = MysqlConn
            myCmd.CommandText = sqlquery
            myCmd.Parameters.AddWithValue("@foto", ListBox1.Items)
    
    
            'adapter.SelectCommand = myCmd'
            'Dim mydata As MySqlDataReader'
            READER = COMMAND.ExecuteNonQuery()
    
            For Each item In ListBox1.Items
    
            Next
    
            MysqlConn.Dispose()
    
        End Sub
    End Class
    Malheureusement je ne comprends pas pourquoi. Donc c'est casse co**lle. Même si je suis debutant et que j'essai tant bien que mal de faire mes petits programmes.

    Le truc que je voulais c'est savoir comment uploader plusieurs fichiers dans une BD (dans mon cas Mysql). Rien a foutre de la taille des fichiers, en general pas plus de 5Mo. Y'a plein d'exemple sur le net pour uploader un fichier (1 fichier) photo ou autres. Mais rien qui dit comment uploader + de 2 fichiers

    J'ai des petits programme qui marchent bien pour mes petits truc de tous les jours. Mais déjà si sa marche pas pour l'upload j'abandonne.

  8. #8
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Re,

    c'était une blague faut pas le prendre mal !
    Toutefois tu n'as pas dû regarder mon dernier message dans la discussion précédente où je dis exactement ce qu'il faut faire (pour le précédent problème ; j'ai pas lu celui-ci).
    Ensuite l'erreur que tu m'avais remontée était dû à une mauvaise utilisation de la fonction.
    Celle que tu présentes ici n'est toujours pas bonne.

    ExecuteNonQuery retourne un entier (int), tu ne peux donc pas affecter son résultat à un DataReader.

    Deux petites astuces :
    - dans Visual Studio, quand tu passes la souris sur le mot souligné en rouge, une info-bulle apparaît et te dit l'origine du problème,
    - pour savoir comment fonctionne une classe/attribut/méthode, regarde les info sur le site de la MSDN, ça aide grandement.

    Bonne continuation

  9. #9
    Membre chevronné
    Avatar de nouanda
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mai 2002
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mai 2002
    Messages : 246
    Par défaut
    Essaie ça. Je n'ai ni VB ni MySQL sous la main, donc pas testé...

    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
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
            Try
                MysqlConn.Open()
            Catch Myerror As MySqlException
                MsgBox("Error connection to the database!")
     
            End Try
     
            For Each item In ListBox1.Items
                Try
                    fs = New FileStream(item.ToString(), FileMode.Open, FileAccess.Read)
                    FileSize = fs.Length
                    rawData = New Byte(FileSize) {}
                    fs.Read(rawData, 0, FileSize)
                    fs.Close()
     
                    Sql = "INSERT INTO xcollectibles.foto VALUES(?File)"
                    myCmd.Connection = MysqlConn
                    myCmd.CommandText = Sql
                    myCmd.Parameters.Add("?File", rawData)
                    If (myCmd.ExecuteNonQuery()!= 1) Then Throw New Exception("An exception has occurred.")
                Catch //a toi de jouer
                    End Try
            Next
     
            MysqlConn.Dispose()
     
        End Sub

Discussions similaires

  1. Upload fichier et insertion mysql
    Par nkordiko dans le forum jQuery
    Réponses: 2
    Dernier message: 03/01/2011, 23h38
  2. [MySQL] Fromulaire pour upload fichier + insertion dans la base de données MySQL
    Par WPH2009 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2009, 21h09
  3. Upload et insertion multiple de fichier
    Par titou_777 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2009, 11h21
  4. [MySQL] upload photo php-mysql - effacer fichier sur ftp
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/02/2009, 16h00
  5. Upload multiple + insert du nom dans MySQL
    Par abrioit dans le forum Langage
    Réponses: 6
    Dernier message: 09/01/2009, 11h43

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