+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Assenza improvvisa della connessione di rete

  1. #1
    Fedeciprova non è in linea Scolaretto
    Luogo
    Mantova
    Post
    84

    Assenza improvvisa della connessione di rete

    Buongiorno a tutti
    a volte mi trovo a lavorare in posti dove la copertura internet con chiavetta in 4G non è delle migliori…
    Con il codice seguente inserisco dei dati in un datatable e poi verifico se ci sono record che soddisfano la mia richiesta.
    codice:
     Public Sub SqlDownloadData(ByVal StringConnection As String, ByVal StringSql As String, ByRef Tabella As DataTable)
                Try
                    Dim da As New OleDbDataAdapter
                    da = New OleDbDataAdapter(StringSql, StringConnection)
                    da.Fill(Tabella)
                Catch ex As Exception
                    MessageBox.Show(ex.ToString, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
        End Sub
    Il problema è che se si interrompe la connessione, mi arriva il messaggio dell'eccezione e poi ritorna un datatable senza record. A questo punto non so come fare a distinguere tra un datatable vuoto perché non ci sono record desiderati oppure perché la connessione si è interrotta.

    Praticamente non so come costruire una funzione che mi ritorni il datatable solo se non ci sono stati errori.

    Grazie

  2. #2
    Fedeciprova non è in linea Scolaretto
    Luogo
    Mantova
    Post
    84
    Per ora ho risolto trasformando la sub in function con return booleano

    codice:
     Public Function DownloadData(ByVal StringConnection As String, ByVal StringSql As String, ByRef Tabella As DataTable) As Boolean
                Try
                    Dim da As New OleDbDataAdapter
                    da = New OleDbDataAdapter(StringSql, StringConnection)
                    da.Fill(Tabella)
                    Return True
                Catch ex As Exception
                    MessageBox.Show(ex.ToString, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Return False
                End Try
        End Function
    Nella parte del programma dove lancio questa function prendo in considerazione il datatable solo se ritorna true, in caso contrario lancio un messaggio di mancanza rete con la possibilità di ritentare.

    Non sono sicuro di avere fatto in modo corretto, per cui accetto qualsiasi indicazione in merito.

    Grazie

  3. #3
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Luogo
    Prato
    Post
    2,701
    no...ci sono le funzioni delle transazioni che se qualcosa non và a buon fine fanno il roll back..devi documentarti su questo anche se io mi riferisco per il remoto.
    Sono stato nella terra del terrore e dei Vampiri...la transilvania? No!..in Banca.
    A Lupara?Min***a...Tecnologia Sicula è!

  4. #4
    Fedeciprova non è in linea Scolaretto
    Luogo
    Mantova
    Post
    84
    Quote Originariamente inviato da sistemista Visualizza il messaggio
    no...ci sono le funzioni delle transazioni che se qualcosa non và a buon fine fanno il roll back..devi documentarti su questo anche se io mi riferisco per il remoto.
    Ma se qualcosa non và a buon fine, anche facendo il roll back, mi verrà restituito un datatable vuoto così come lo avevo all'inizio della funzione…ed a quel punto non so se il datatable è vuoto perché la select non soddisfava i criteri oppure per mancanza di connessione.

    Dove sbaglio?

  5. #5
    Dev-01 non è in linea Scolaretto
    Post
    445
    Dopo aver inviato la query devi interrogare lo stato della presunta tabella d'interesse tenendo conto dei possibili scenari.

    Quali sono gli scenari?

    a) La tabella è Nothing;

    b) la tabella non è Nothing ma non contiene records;

    c) la tabella non è Nothing e contiene persino dei records.

    Azioni da intraprendere:

    a) Msgbox("Impossibile effettuare il recupero dei dati."
    "Possibili cause: la connessione è interrotta, impossibile accedere al database"
    "oppure la query contiene errori.") : Exit Sub;

    In merito all'ultima voce sarebbe opportuno intercettare l'errore in maniera canonica sfruttando le eccezioni.

    b) Msgbox("Nessun dato disponibile per la selezione specificata.") : Exit Sub;

    c) Associo i dati al controllo che dovrà visualizzarli.

    Le transazioni e i relativi rollback funzionano solo per le azioni di inserimento, aggiornamento ed eliminazione, o più precisamente, non funzionano in fase di lettura poiché, in questo caso, non hanno ragione d'essere.

    In caso di sola lettura non c'è niente da riportare allo stato precedente all'interno dei dati. Eventualmente vanno resettate alcune impostazioni/opzioni/variabili del programma ma di questo si deve occupare il programmatore, non l'engine di database il quale non ha alcun potere sull'eseguibile.

  6. #6
    Fedeciprova non è in linea Scolaretto
    Luogo
    Mantova
    Post
    84
    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    Dopo aver inviato la query devi interrogare lo stato della presunta tabella d'interesse tenendo conto dei possibili scenari.

    Quali sono gli scenari?

    a) La tabella è Nothing;

    b) la tabella non è Nothing ma non contiene records;

    c) la tabella non è Nothing e contiene persino dei records.

    Azioni da intraprendere:

    a) Msgbox("Impossibile effettuare il recupero dei dati."
    "Possibili cause: la connessione è interrotta, impossibile accedere al database"
    "oppure la query contiene errori.") : Exit Sub;

    In merito all'ultima voce sarebbe opportuno intercettare l'errore in maniera canonica sfruttando le eccezioni.

    b) Msgbox("Nessun dato disponibile per la selezione specificata.") : Exit Sub;

    c) Associo i dati al controllo che dovrà visualizzarli.

    Le transazioni e i relativi rollback funzionano solo per le azioni di inserimento, aggiornamento ed eliminazione, o più precisamente, non funzionano in fase di lettura poiché, in questo caso, non hanno ragione d'essere.

    In caso di sola lettura non c'è niente da riportare allo stato precedente all'interno dei dati. Eventualmente vanno resettate alcune impostazioni/opzioni/variabili del programma ma di questo si deve occupare il programmatore, non l'engine di database il quale non ha alcun potere sull'eseguibile.
    Grazie Dev-01, ho seguito il tuo consiglio….ed è tutto risolto.
    Un ringraziamento anche a tutto il forum, per me punto di riferimento

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi