Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
Wireless 2.4 GHz, Bluetooth 5.4, cancellazione attiva del rumore, design pieghevole e un'autonomia che mette in imbarazzo prodotti che costano il doppio. Le Maestro 500 non eccellono in nulla, ma offrono tutto. E a questo prezzo è difficile chiedere di più
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-05-2011, 16:54   #1
jackk87
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 404
[VB.NET] Problema rilascio instanza excel con backgroundworker..

Buongiorno a tutti,
dalla mia applicazione vb devo importare i dati di un file excel che contiene i comuni quindi circa 10000 record.
L'importazione la eseguo tramite il backgroundworker in modo che l'applicazione non si blocchi. L'importazione funziona correttamente solo che al termine della stessa mi rimane il processo di excel in memoria (task manager) e non viene rilasciato.

il codice che uso è:
Codice:
Private Sub ImportaFileExcel()
        Dim FileExcel As Microsoft.Office.Interop.Excel.Workbook
        Dim FoglioExcel As Microsoft.Office.Interop.Excel.Worksheet

        Try
            FileExcel = excelApp.Workbooks.Open(tbDirectory.Text) 'cartella di lavoro Excel

            excelApp.Visible = False 'Nascondo l'applicazione Excel
            FileExcel.Activate() 'Attivo il file
            FoglioExcel = FileExcel.Worksheets(1) 'Seleziono il primo foglio

            Dim numcolonna As Integer = 1 'Variabile per scansionare tutte le colonne
            Dim ColonnaComune As Integer = 0 'Variabile per memorizzare la colonna del Comune
            Dim ColonnaCap As Integer = 0 'Variabile per memorizzare la colonna del Cap
            Dim ColonnaProvincia As Integer = 0 'Variabile per memorizzare la colonna della Provincia

            'Ciclo per trovare gli indici di colonna
            For numcolonna = 1 To 50
                If FoglioExcel.Cells(1, numcolonna).value = "Descrizione" Then
                    ColonnaComune = numcolonna
                ElseIf FoglioExcel.Cells(1, numcolonna).value = "CAP" Then
                    ColonnaCap = numcolonna
                ElseIf FoglioExcel.Cells(1, numcolonna).value = "Codice_Provincia" Then
                    ColonnaProvincia = numcolonna
                End If
                If (FoglioExcel.Cells(1, numcolonna).value = Nothing) And (ColonnaComune <> 0) And (ColonnaCap <> 0) And (ColonnaProvincia <> 0) Then
                    Exit For
                End If
            Next

            If ColonnaCap = 0 Or ColonnaComune = 0 Or ColonnaProvincia = 0 Then
                FoglioExcel = Nothing
                FileExcel.Close(False)
                FileExcel = Nothing
                excelApp.Quit()
                excelApp = Nothing

                MessageBox.Show("Errore: Impossibile trovare le colonne interessate (Descrizione,CAP,Codice_Provincia)..", "Ricerca colonne nel file excel", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

                ErroreColonne = True
                Exit Sub
            End If

            Dim numriga As Integer = 2 'Variabile per scansionare tutte le riche
            Dim Comune, Cap, Provincia As String 'Variabile per memorizzare il destinatario e l'indirizzo
            Dim percentuale As Integer = 0 'Variabile per memorizzare la percentuale dell'avanzamento
            Dim numerorighe As Integer = FoglioExcel.UsedRange.Rows.Count 'Variabile che contiene il numero di righe totali
            Dim idcategoria As Integer = 0 'variabile dove memorizzo l'ID della categoria
            Dim DR As SqlDataReader

            Dim TR As SqlClient.SqlTransaction 'Variabile della Transazione SQL
            Try
                Cn.Open() 'Apro la connessione al DB

                TR = Cn.BeginTransaction(IsolationLevel.ReadCommitted) 'Inizio della Transazione
                Dim CMD As New SqlCommand("", Cn, TR) 'SqlCommand con la transazione

                'Codice SQL
                CMD.CommandText = "DELETE FROM comuni"

                CMD.ExecuteNonQuery() 'Eseguo il codice SQL

                TR.Commit() 'Effettuo le modifiche nel DB
                Cn.Close() 'Chiudo la connessione al DB
            Catch ex As Exception
                FoglioExcel = Nothing
                FileExcel.Close(False)
                FileExcel = Nothing
                excelApp.Quit()
                excelApp = Nothing
                MessageBox.Show("Errore: " & ex.Message, "Svuotamento tabella comuni nel DB", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Try
                    TR.Rollback() 'Non effettuo le modifiche nel DB mandando un errore
                Catch exRollback As Exception
                    MessageBox.Show("Errore: " & exRollback.Message, "Svuotamento tabella comuni nel DB con RollBack", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                End Try
                If Cn.State = ConnectionState.Open Then 'Se la connessione al DB è aperta
                    Cn.Close() 'Chiudo la connessione al DB
                End If
                Exit Sub
            End Try

            'Ciclo per memorizzare i dati nel DB
            For numriga = 2 To numerorighe
                Try
                    Comune = FoglioExcel.Cells(numriga, ColonnaComune).value
                    Cap = FoglioExcel.Cells(numriga, ColonnaCap).value
                    Provincia = FoglioExcel.Cells(numriga, ColonnaProvincia).value

                    If String.IsNullOrEmpty(Comune) Then
                        Exit Try
                    End If

                    Cn.Open() 'Apro la connessione al DB

                    TR = Cn.BeginTransaction(IsolationLevel.ReadCommitted) 'Inizio della Transazione
                    Dim CMD As New SqlCommand("", Cn, TR) 'SqlCommand con la transazione

                    'Codice SQL
                    CMD.CommandText = "INSERT INTO comuni(descrizione,cap,provincia) " & _
                                      "VALUES(@descrizione,@cap,@provincia)"

                    CMD.Parameters.Add("@descrizione", SqlDbType.VarChar) 'Parameters
                    CMD.Parameters.Add("@cap", SqlDbType.Int) 'Parameters
                    CMD.Parameters.Add("@provincia", SqlDbType.VarChar) 'Parameters

                    'Assegnazione Parametri :
                    CMD.Parameters("@descrizione").Value = Comune
                    If String.IsNullOrEmpty(Cap) Then
                        CMD.Parameters("@cap").Value = 0
                    Else
                        CMD.Parameters("@cap").Value = Cap
                    End If

                    If String.IsNullOrEmpty(Provincia) Then
                        CMD.Parameters("@provincia").Value = ""
                    Else
                        CMD.Parameters("@provincia").Value = Provincia
                    End If

                    CMD.ExecuteNonQuery() 'Eseguo la query

                    percentuale = percentuale + 1

                    bwImportaExcel.ReportProgress(percentuale * 100 / numerorighe)

                    TR.Commit() 'Effettuo le modifiche nel DB
                    Cn.Close() 'Chiudo la connessione al DB
                Catch ex As Exception
                    FoglioExcel = Nothing
                    FileExcel.Close(False)
                    FileExcel = Nothing
                    excelApp.Quit()
                    excelApp = Nothing
                    MessageBox.Show("Errore: " & ex.Message, "Inserimento comune importato nel DB", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    Try
                        TR.Rollback() 'Non effettuo le modifiche nel DB mandando un errore
                    Catch exRollback As Exception
                        MessageBox.Show("Errore: " & exRollback.Message, "Inserimento comune importato nel DB con RollBack", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    End Try
                    If Cn.State = ConnectionState.Open Then 'Se la connessione al DB è aperta
                        Cn.Close() 'Chiudo la connessione al DB
                    End If
                    Exit Sub
                End Try
            Next

            FoglioExcel = Nothing
            FileExcel.Close(False)
            FileExcel = Nothing
            excelApp.Quit()
            excelApp = Nothing
        Catch ex As Exception
            FoglioExcel = Nothing
            FileExcel.Close(False)
            FileExcel = Nothing
            excelApp.Quit()
            excelApp = Nothing
            MessageBox.Show("Errore: " & ex.Message, "Inserimento file Excel nel DB", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End Try
    End Sub

    '*******BACKGROUND WORKER***********
    Private Sub bwImportaExcel_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwImportaExcel.DoWork
        ImportaFileExcel() 'Chiamo la procedura
    End Sub

    Private Sub bwImportaExcel_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwImportaExcel.ProgressChanged
        pbPercentuale.Value = e.ProgressPercentage
        lbPercentuale.Text = e.ProgressPercentage & " %"
    End Sub

    Private Sub bwImportaExcel_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwImportaExcel.RunWorkerCompleted
        If e.Cancelled Then
            'Una cancellazione?
            MessageBox.Show("Importazione annullata!", "Errore..", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            btSalva.Enabled = True
            btAnnulla.Enabled = True
        ElseIf e.Error IsNot Nothing Then
            'Un'eccezione?
            MessageBox.Show("Si è verificato un errore!", "Errore..", MessageBoxButtons.OK, MessageBoxIcon.Error)
            btSalva.Enabled = True
            btAnnulla.Enabled = True
        Else
            frmOpzioni.CaricaDGW_Comuni()
            If ErroreColonne = False Then
                MsgBox("Importazione effettuata con successo!", MsgBoxStyle.Information, "Avviso..")
            Else
                MessageBox.Show("Importazione annullata!", "Errore..", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
            abilitachiusura = True
            Me.Close()
        End If
        bwImportaExcel.Dispose()
    End Sub
ho provato anche con oledb ma il problema rimane il codice è:
Codice:
Private Sub ImportaFileExcelConOleDB()
        Dim CnFileExcel As OleDbConnection
        Try
            CnFileExcel = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tbDirectory.Text & ";Extended Properties='Excel 8.0'")

            Dim sql As String

            sql = "select Descrizione,CAP,Codice_Provincia from Comuni_ISTAT"

            CnFileExcel.Open()

            Dim CMDExcel As OleDbCommand = New OleDbCommand(sql, CnFileExcel)
            Dim DA As OleDbDataAdapter = New OleDbDataAdapter(CMDExcel)
            Dim DT As DataTable = New DataTable()
            DA.Fill(DT)

            CMDExcel.Dispose()

            CnFileExcel.Close()

            Dim TR As SqlClient.SqlTransaction 'Variabile della Transazione SQL
            Try
                Cn.Open() 'Apro la connessione al DB

                TR = Cn.BeginTransaction(IsolationLevel.ReadCommitted) 'Inizio della Transazione
                Dim CMD As New SqlCommand("", Cn, TR) 'SqlCommand con la transazione

                'Codice SQL
                CMD.CommandText = "DELETE FROM comuni"

                CMD.ExecuteNonQuery() 'Eseguo il codice SQL

                TR.Commit() 'Effettuo le modifiche nel DB
                Cn.Close() 'Chiudo la connessione al DB
            Catch ex As Exception
                MessageBox.Show("Errore: " & ex.Message, "Svuotamento tabella comuni nel DB", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Try
                    TR.Rollback() 'Non effettuo le modifiche nel DB mandando un errore
                Catch exRollback As Exception
                    MessageBox.Show("Errore: " & exRollback.Message, "Svuotamento tabella comuni nel DB con RollBack", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                End Try
                If Cn.State = ConnectionState.Open Then 'Se la connessione al DB è aperta
                    Cn.Close() 'Chiudo la connessione al DB
                End If
                Exit Sub
            End Try

            Dim Comune, Cap, Provincia As String 'Variabile per memorizzare il destinatario e l'indirizzo
            Dim percentuale As Integer = 0 'Variabile per memorizzare la percentuale dell'avanzamento

            For i = 0 To DT.Rows.Count - 1
                Try
                    Comune = DT.Rows(i).Item(0).ToString
                    Cap = DT.Rows(i).Item(1).ToString
                    Provincia = DT.Rows(i).Item(2).ToString

                    If String.IsNullOrEmpty(Comune) Then
                        Exit Try
                    End If

                    Cn.Open() 'Apro la connessione al DB

                    TR = Cn.BeginTransaction(IsolationLevel.ReadCommitted) 'Inizio della Transazione
                    Dim CMD As New SqlCommand("", Cn, TR) 'SqlCommand con la transazione

                    'Codice SQL
                    CMD.CommandText = "INSERT INTO comuni(descrizione,cap,provincia) " & _
                                      "VALUES(@descrizione,@cap,@provincia)"

                    CMD.Parameters.Add("@descrizione", SqlDbType.VarChar) 'Parameters
                    CMD.Parameters.Add("@cap", SqlDbType.Int) 'Parameters
                    CMD.Parameters.Add("@provincia", SqlDbType.VarChar) 'Parameters

                    'Assegnazione Parametri :
                    CMD.Parameters("@descrizione").Value = Comune
                    If String.IsNullOrEmpty(Cap) Then
                        CMD.Parameters("@cap").Value = 0
                    Else
                        CMD.Parameters("@cap").Value = Cap
                    End If

                    If String.IsNullOrEmpty(Provincia) Then
                        CMD.Parameters("@provincia").Value = ""
                    Else
                        CMD.Parameters("@provincia").Value = Provincia
                    End If

                    CMD.ExecuteNonQuery() 'Eseguo la query

                    percentuale = percentuale + 1

                    bwImportaExcel.ReportProgress(percentuale * 100 / DT.Rows.Count)

                    TR.Commit() 'Effettuo le modifiche nel DB
                    Cn.Close() 'Chiudo la connessione al DB
                Catch ex As Exception
                    MessageBox.Show("Errore: " & ex.Message, "Inserimento comune importato nel DB", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    Try
                        TR.Rollback() 'Non effettuo le modifiche nel DB mandando un errore
                    Catch exRollback As Exception
                        MessageBox.Show("Errore: " & exRollback.Message, "Inserimento comune importato nel DB con RollBack", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    End Try
                    If Cn.State = ConnectionState.Open Then 'Se la connessione al DB è aperta
                        Cn.Close() 'Chiudo la connessione al DB
                    End If
                    Exit Sub
                End Try
            Next
        Catch ex As Exception
            If CnFileExcel.State = ConnectionState.Open Then
                CnFileExcel.Close()
            End If
            MessageBox.Show("Errore: " & ex.Message, "Inserimento file Excel nel DB", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End Try
    End Sub
grazie in anticipo a tutti
jackk87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
La PS6 si farà attendere: il lanc...
OnePlus non sente la crisi delle memorie...
I futuri iPhone 18 Pro potrebbero costar...
Bosch eBike Systems MY2027: a sorpresa a...
Amazon, le top 5 offerte del weekend per...
Sesto giorno di Prime Day anticipato Ama...
La scopa elettrica Roborock F25 Ultra sc...
Ho messo uno studio video con Intelligen...
Dreame Aqua10 Ultra Roller Complete punt...
Roborock Saros 20 Set sembra fuori categ...
Samsung Galaxy Z Fold 8: prezzi in salit...
NVIDIA mostra una comunità di rob...
Sony annuncia LYTIA L910, arriva il sens...
Ericsson, il 5G è l’infrastruttur...
Marvell punta tutto su TSMC A14: sar&agr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v