Torna al Thread
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