Errore: Eccezione lanciata da un componente esterno

di il
2 risposte

Errore: Eccezione lanciata da un componente esterno

Cercando di riuscire nella transizione da Access a un applicativo sviluppato in .NET, sono passato da Cà a VB.NET che sembrava avermi dato qualche risultato.

Sto seguendo gli articoli ".Net la gestione del database Microsoft Access tramite VB.Net e C#" di Emanuele Mattei(sant'uomo) con VS 2022.
Seguiti gli articoli l'applicazione funzionava.

Fatte altre prove con funzionalità semplici(richiamo di una form, passaggio di parametri tra due form, ecc.) ho cercato di provare un altro componente necessario i Report.

Individuate due soluzioni: Reportviewer  e Crystal Report.

Seguendo il sant'uomo sopra citato, ho seguito gli articoli con l'installazione e i primi tentativi.
Sono cominciati gli errori che hanno portato a che l'applicazione sviluppata non funzionasse più.

Cercando di fare un passo indietro ho disinstallato il Reportviewer.
Gli errori sono continuati.

Disinstallato VS 2022 e reinstallato.
Ripreso dall'inizio lo sviluppo seguendo l'articolo per la gestione del database.
Sviluppati gli oggetti(secondo articolo) che vengono popolati con i dati di Access e il codice per estrarre i dati al caricamento della Form.

Si ripresenta l'errore "Errore: Eccezione lanciata da un componente esterno".

Disinstallato VS 2022 cercando di ripulire, seguendo le indicazioni

Installato VS 2026. Senza risultato l'errore si ripresenta.
Su un altro pc il progetto si avvia e presenta i dati.

Questo è il codice presente

Imports System.Data.OleDb
Public Class frmInizio
   Dim strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=K:\VBasic\Dati.accdb"
   Private Sub CaricaDati()
       Try
           'carico le combobox
           Using sqlConnessione As New OleDbConnection(strConn)
               sqlConnessione.Open()
               Using CommandSql As New OleDbCommand("Select ID, Denominazione FROM Clienti", sqlConnessione)
                   Using dtaAdapter As New OleDbDataAdapter(CommandSql)
                       Using dttDati As New DataTable()
                           dtaAdapter.Fill(dttDati)
                           CmbClienti.ValueMember = "ID"
                           CmbClienti.DisplayMember = "Denominazione"
                           CmbClienti.DataSource = dttDati.DefaultView
                       End Using
                       Using dttDati As New DataTable
                           dtaAdapter.SelectCommand = New OleDbCommand("Select ID, NumeroFattura FROM Fatture", sqlConnessione)
                           dtaAdapter.Fill(dttDati)
                           CmbFattura.ValueMember = "ID"
                           CmbFattura.DisplayMember = "NumeroFattura"
                           CmbFattura.DataSource = dttDati.DefaultView
                       End Using
                       Using dttDati As New DataTable
                           dtaAdapter.SelectCommand = New OleDbCommand("SELECT fat.*, cli.*, ord.*  FROM ((Fatture fat left join Clienti cli on fat.idclienti = cli.id) left join ordini ord on fat.id = ord.idfattura)", sqlConnessione)
                           dtaAdapter.Fill(dttDati)
                           DtgDati.DataSource = dttDati
                       End Using
                   End Using
               End Using
           End Using
       Catch ex As Exception
           MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
   End Sub
   Private Sub FrmInizio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       Try
           CaricaDati()
       Catch ex As Exception
           MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
   End Sub
End Class

Nella finestra di controllo immediato è presente il messaggio:

Eccezione generata: 'System.Runtime.InteropServices.SEHException' in System.Data.dll

Non ho trovato una soluzione al problema

2 Risposte

  • Re: Errore: Eccezione lanciata da un componente esterno

    A giudicare dal codice, non c'entrano nulla ne ReportViewer ne CristalReport. Dal codice che hai condiviso non li adoperi in quella parte di sorgente.

    Di sicuro la differenza non la fa VS2022 o VS2026 che son solo gli IDE.

    Quel che a prima vista trovo strano è che usi sempre dttDati come DataTable e che cambi in continuazione la Select del DataAdapter.

    Approfondirei anche la SEHException: hai qualcosa nella sua proprietà Data? ErrorCode è valorizzata? InnerException è diverso da Nothing?

    Anche il Try...Catch è usato in modo un po' confusionario. Se lo hai già usato nel corpo della Sub CaricaDati, a cosa serve usarlo anche nel Load? Nel Load non potrai mai avere il sollevamento di un'eccezione, visto che in CaricaDati non hai nessun blocco che non gestisce, o che sollevi nuove eccezioni o che faccia un Throw.

  • Re: Errore: Eccezione lanciata da un componente esterno

    Prova a togliere try...catch e manda in esecuzione il programma, magari si capisce meglio quale è la riga che va in errore

Devi accedere o registrarti per scrivere nel forum
2 risposte