Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 34
  1. #1

    Chiusura Connessione al Database

    Salve a tutti,
    da poco utilizzo delle classi apposite per integarire con il database, ma ognitanto il mio db server mi va in palla perchè evidentemente non chiudo correttamente la connessione al DB (problemi di spooler che sinceramente non so cosa siano!).

    Rivedendo le classi in efeftti mi sono accorto che la connessione non viene chiusa quando c'è un errore, allora volevo chiedere a voi un aiuto su come impostare correttamente la procedura.

    Vi posto una routine di scrittura sul DB e vi chiedo se così può andar bene o se invece devo modificarla in qualche modo:

    codice:
        Public Sub Salva(ByVal strStringaConnessione As String)
    
            ' Variabili Locali
            '
            Dim cmd_Scrive As New SqlCommand
            Dim cn As New SqlConnection(strStringaConnessione)
            Dim SQL_Scrive As String = vbNullString
            '
            ' Salva Dati
            '
            Try
    
                cmd_Scrive.Connection = cn
                cn.Open()
                '
                SQL_Scrive &= "INSERT INTO MyTable"
                SQL_Scrive &= "( "
                SQL_Scrive &= "dato1, "
                SQL_Scrive &= "dato2, "
                SQL_Scrive &= "dato3 "
                SQL_Scrive &= ") "
                SQL_Scrive &= "VALUES "
                SQL_Scrive &= "( "
                SQL_Scrive &= "@dato1, "
                SQL_Scrive &= "@dato2, "
                SQL_Scrive &= "@dato3 "
                SQL_Scrive &= ") "
                '
                cmd_Scrive.Parameters.AddWithValue("@dato1", SqlDbType.NText).Value = dato1
                cmd_Scrive.Parameters.AddWithValue("@dato2", SqlDbType.NText).Value = dato2           
                cmd_Scrive.Parameters.AddWithValue("@dato3", SqlDbType.NText).Value = dato3           
                '
                cmd_Scrive.CommandText = SQL_Scrive
                cmd_Scrive.ExecuteNonQuery()
    
            Catch ex As Exception
    
                ' Visualizza Messaggio di Errore
                '
                MessageBox.Show(ex.Message)
    
            Finally
    
                ' Chiude la connessione se aperta
                '
                If Not cn Is Nothing Then cn.Close()
    
            End Try
    
        End Sub
    Un'altra cosa: è necessario anche fare un "cn.Dispose()" dopo aver chiuso la connessione?

    GRAZIE MILLE a tutti.
    Igor
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    eppure se lo fai nel finally io direi che la chiudi sempre!

    conn.Dispose() e' una valida alternativa alla conn.Close(), perche la dispose di una connection ne prevede anche la sua chiusura!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    cmq ce un costrutto alternativo al try/finally, chiamato USING

    using obj
    'operazioni
    end using

    in pratica quando esci dal corpo dello using, anche se con una eccezione, viene chiamato il metodo dispose sull' oggetto!
    naturalmente la cosa funziona solo per gli oggetti disposabili!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  4. #4
    Lo using non l'ho mai usato, ma forse con il try/catch tengo traccia degli errori e mi accorgo di quello che succede.

    Riassumendo quindi dite che va bene così come ho scritto senza il dispose?

    Ho anche trovato questa "alternativa", forse è più consona?

    codice:
            Finally
    
                ' Chiude la connessione se aperta
                '
                If (cn.State = ConnectionState.Open) Then cn.Close()
    
            End Try
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    chiudere la connessione se e' gia chiusa non fa nessun danno, quindi come controllo e' abb superfluo secondo me!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    io uso questo:

    If Not (Connessione Is Nothing) Then Connessione.Close()
    Pietro

  7. #7
    Ok allora mi adeguo pure io!

    Per quanto riguarda invece il "DataReader"?

    Se provo a chiudere anche questo nel blocco Finally l'editor me lo sottoliena di verde e mi dice che "La varuabile viene utilizzata prima che le sia stato assegnato un valore"...

    codice:
            Finally
    
                ' Chiude la connessione se aperta
                '
                dr_Legge.Close()
                If (cn.State = ConnectionState.Open) Then cn.Close()
    
            End Try
    Lo lascio li o lo sposto nel blocco catch? VVoVe:
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    lascialo nel finally ovviamente!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  9. #9
    E se ci metto una cosa tipo questa, può avere un senso?
    (quella nota che mi evidenzia l'editor mi mette ansia..)

    codice:
                If Not (dr_Legge Is Nothing) Then dr_Legge.Close()
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Mi avete fatto venire un dubbio.

    Siete sicuri che la connessione da chiusa sia Nothing ? :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.