Visualizzazione dei risultati da 1 a 9 su 9

Discussione: vb.net - inserire dati

  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    vb.net - inserire dati

    Dopo aver fatto la query x l'inserimento dati, la eseguo sempre allo stesso modo? cioè:

    Dim query As New MySqlCommand(sql, conn)
    query.ExecuteReader()

    E perché mi dice sempre ke ho ancora datareader in esecuzione x quella connessione????? Come faccio a kiudere tutti i datareader precedenti in modo tale da farne un altro? (anche quando sn sicuro di averli kiusi)

  2. #2
    prova con:
    If conn.State = ConnectionState.Open Then
    conn.Close()
    End If
    Ciao

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Re: vb.net - inserire dati

    Originariamente inviato da FinalFantasy
    E perché mi dice sempre ke ho ancora datareader in esecuzione x quella connessione????? Come faccio a kiudere tutti i datareader precedenti in modo tale da farne un altro? (anche quando sn sicuro di averli kiusi)
    Come fai ad essere sicuro di averli chiusi?

    Dal codice che hai postato, non appare alcuna chiamata al metodo Close dell'oggetto XXXDataReader.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    x kiudere le connessioni faccio

    Try
    'codice
    Catch e as MysqlException
    'l'eccezione
    Finally
    datareader.Close()
    End Try


    xo secondo quel stupido compilatore non è chiuso. Non ho mai ben capito fin in fondo il try...catch, però credo ke finally significa ke in ogni caso deve eseguire quelle istruzioni, o mi sbaglio?

  5. #5
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da mardok30
    prova con:
    If conn.State = ConnectionState.Open Then
    conn.Close()
    End If
    Ciao
    ma io nn voglio kiudere la connessione, ma i datareader

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da FinalFantasy
    x kiudere le connessioni faccio
    [...]
    xo secondo quel stupido compilatore non è chiuso. Non ho mai ben capito fin in fondo il try...catch, però credo ke finally significa ke in ogni caso deve eseguire quelle istruzioni, o mi sbaglio?
    Try...Catch consente di intercettare e gestire eccezioni, mentre Try...Finally ti garantisce l'esecuzione delle istruzioni incluse nel blocco Finally anche in caso di sollevamento di un'eccezione (che viene comunque intercettata dal primo blocco esterno preposto alla gestione dell'errore, eventualmente fornito dal framework se mancante).

    Probabilmente, l'errore è da ricercarsi da un'altra parte o è causato da qualcos'altro.

    Assicurati di avere una forma del tipo:
    codice:
      MyReader := MyCommand.ExecuteReader()
      Try
        If MyReader.Read() Then
          ' ...
        End If
      Finally
        MyReader.Close()
      End Try
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    ovviamente. L'ultimo datareader aperto prima di quel dannato errore è:
    codice:
        Private Sub pagina4_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles pagina4.VisibleChanged
            If pagina4.Visible = True Then
                lblstatus.Text = "Amministrazione utenti"
                Dim query As New MySqlCommand("query", conn)
                Dim reader As MySqlDataReader
                Dim item As ListViewItem
                Try
                    reader = query.ExecuteReader()
                    lsvUtenti.Items.Clear()
                    While (reader.Read)
                        Dim ms() As String = {reader.GetString(0), reader.GetString(1), _
                        reader.GetString(2), reader.GetString(3), _
                        reader.GetString(4), reader.GetString(5), _
                        reader.GetString(6), reader.GetString(7), _
                        reader.GetString(8), reader.GetString(9), _
                        reader.GetString(10)}
                        item = New ListViewItem(ms)
                        lsvUtenti.Items.Add(item)
                    End While
                Catch ex As MySqlException
                    MsgBox(ex.Message, MsgBoxStyle.Critical, "Errore nella lettura dei dati")
                Finally
                    reader.Close()
                End Try
            End If
        End Sub
    questo funge veramente, ma appena faccio l'altra rikiesta, mi dice ke questo datareader nn è kiuso :master:

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    La chiamata a ExecuteReader va eseguita prima del Try...Finally, pertanto deve rimanere esterna al ciclo.

    Per il resto, il tuo problema rimane davvero un...Poltergeist. :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    ora gli prende un'altra pazia...

    codice:
    Private Sub cmdInserisci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInserisci.Click
                Dim sql As String = "query"
                Dim query As New MySqlCommand(sql, conn)
                Dim reader As MySqlDataReader
                reader = query.ExecuteReader()
                Try
                    lblstatus.Text = "Utente inserito con succeso."
                    pagina4_VisibleChanged(sender, e)
                Catch ex As MySqlException
                    MsgBox(ex.Message, MsgBoxStyle.Critical, "Errore nell'inserimento dell'utente")
                    lblstatus.Text = "Inserimento utente fallito!"
                Finally
                    reader.Close()
                End Try
            End If
    con questo codice inserisco 1 dato nel db. Ora quando premo questo dannato pulsante, l'utente lo inserisce, xo, mi va nell'eccezione e mi dice ke il datacoso è già aperto x questa connessione... :master:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.