Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET - Caricamento - Download - File Database MySQL - Percentuale Caricamento - Download
Forum - C# / VB.NET - VB.NET - Caricamento - Download - File Database MySQL - Percentuale Caricamento - Download

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 10:53
Lunedì, 21/07/2014
Salve a tutti.
Per caricare un file in un database MySQL uso questo codice:

Dim conn As New MySqlConnection      
Dim cmd As New MySqlCommand


        Dim SQL As String


        Dim FileSize As UInt32
        Dim rawData() As Byte
        Dim fs As FileStream




        conn.ConnectionString = "server=ip;" _
            & "uid=user;" _
            & "pwd=pass;" _
            & "database=test"


        OpenFileDialog1.FileName = ""
        OpenFileDialog1.Filter = "txt files (*.jpg)|*.png|All files (*.*)|*.*"
        If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then


            Try


                fs = New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
                FileSize = fs.Length


                rawData = New Byte(FileSize) {}
                fs.Read(rawData, 0, FileSize)
                fs.Close()


                conn.Open()


                SQL = "INSERT INTO upload (file_id,file_name,file_size,file) VALUES(NULL, ?file_name, ?file_size, ?file)"


                cmd.Connection = conn
                cmd.CommandText = SQL
                cmd.Parameters.Add("?file_name", IO.Path.GetFileName(OpenFileDialog1.FileName))
                cmd.Parameters.Add("?file_size", FileSize)
                cmd.Parameters.Add("?file", rawData)


                cmd.ExecuteNonQuery()


                MessageBox.Show("File Inserted into database successfully!", _
                "Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)


                conn.Close()
            Catch ex As Exception
                MessageBox.Show("There was an error: " & ex.Message, "Error", _
                    MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try


        End If


Per scaricare un file in un database MySQL uso questo codice:

  Dim conn As New MySqlConnection      
Dim cmd As New MySqlCommand
        Dim myData As MySqlDataReader
        Dim SQL As String
        Dim rawData() As Byte
        Dim FileSize As UInt32
        Dim fs As FileStream


        conn.ConnectionString = "server=ip;" _
            & "uid=user;" _
            & "pwd=pass;" _
            & "database=test"


        SQL = "SELECT file_name, file_size, file FROM upload where file_id='2';"


        Try
            conn.Open()


            cmd.Connection = conn
            cmd.CommandText = SQL


            myData = cmd.ExecuteReader


            If Not myData.HasRows Then Throw New Exception("There are no BLOBs to save")


            myData.Read()


            FileSize = myData.GetUInt32(myData.GetOrdinal("file_size"))
            rawData = New Byte(FileSize) {}


            myData.GetBytes(myData.GetOrdinal("file"), 0, rawData, 0, FileSize)


            fs = New FileStream("C:\" & myData.GetString(myData.GetOrdinal("file_name")), FileMode.OpenOrCreate, FileAccess.Write)
            fs.Write(rawData, 0, FileSize)
            fs.Close()


            MessageBox.Show("File successfully written to disk!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)


            myData.Close()
            conn.Close()
        Catch ex As Exception
            MessageBox.Show("There was an error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


Vorrei visualizzare la percentuale di caricamento del file in una label ed anche in una progressbar
Come posso fare?
Grazie in anticipo

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 22:42
Lunedì, 21/07/2014
Il codice è interamente tuo o lo hai preso da qualche esempio?

PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 22:56
Lunedì, 21/07/2014
Un pò mio e un pò in rete, perchè?

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:45
Mercoledì, 23/07/2014
Perché senza che tu abbia ben chiaro tutti i passaggi che fai diventa una procedura ostica.

PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 1:01
Giovedì, 24/07/2014
Vi è una soluzione al mio problema?

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 16:02
Giovedì, 24/07/2014
Scusa se non ho risposto completamente prima ma ero di fretta. Mhh non ci giurerei ma credo che sia improbabile... Praticamente tu stai aprendo il file in formato binario, a questo punto scrivi tutti i byte in una cella del database, per tanto il tempo della tua operazione comprende il tempo per aprire il file piu quello per leggerlo piu il tempo per scriverlo nel database. Dato l'altissimo livello con cui esegui queste operazioni mi sembra impossibile giungere a un valore di percentuale, l'unica opzione è sperare che esista un metodo della libreria mysql che ti restituisca la percentuale di completamento della query ma anche questo è fortemente improbabile.

PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 17:09
Giovedì, 24/07/2014
Quindi non è possibile ne avere una percentuale di caricamento(quando scarica), ne avere una percentuale di upload?
Molti mi dicono di usare il BrackgroundWorker.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 1:44
Venerdì, 25/07/2014
Sai a cosa serve la classe BackgroundWorker? Serve ad eseguire delle operazioni in un thread separato, se la tuo applicazione ha un interfaccia utente indubbiamente dovrai spostare le operazioni di upload e download in un thread separato, ma primo non con la classe BackgroundWorker ma direttamente con la classe Thread e secondo non risolveresti in ogni caso il tuo problema, poiché la percentuale di completamento del BackgroundWorker la dovresti dare tu con il metodo ReportProgress.
http://msdn.microsoft.com/it-it/library/ka89zff4%28v=vs.11 ...
Se hai altre domande chiedi pure.

PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 20:16
Venerdì, 25/07/2014
Capito.
Comunque penso che la soluzione ci sia.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo