Intercettare errori di connessione sql express 2012

di il
15 risposte

Intercettare errori di connessione sql express 2012

Dunque,in un mio precedente post di pochi giorni fà che chiedevo di come creare la password per la connessione a sql,dopo varie ricerche sono riuscito a creare l'utente con connessione nome utente e password,autenticazione mista windows e sql,ho collegato l'utente ai database che avevo creato in precendenza e fin quì tutto Ok,ho provato con la mia applicazione in vs 2015 a connettermi con il nome utente e password e funziona tutto ok ma....ho provato a dare le credenziali di accesso in modo volutamente sbagliato e nonostante ho provato nel blocco try/catch mi ritorna il messaggio di sql e non nel blocco try/catch della mia applicazione.
Posto il codice tanto per capirsi...

public class frmpassword
 Private Sub btnOK_Click(
       utente = txtUtente.Text
        mypassword = txtPassword.Text
        apridb()
        frmPostepay.Show()
        end sub
Public Sub apridb()
        myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=Gestionepersonale;User Id=" & utente & ";Password=" & mypassword & ";")
    End Sub
e con questo codice funziona tutto senza problemi
se provo con questo codice che è uguale a quello sopra ma con il blocco try/catch e aprendo la connessione passando il nome utente e la password sbagliati,viene il messaggio come da immagine.

Public Sub apridb()
        Try
            myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=Gestionepersonale;User Id=" & utente & ";Password=" & mypassword & ";")
            myconn.open
        Catch ex As SqlException
            MessageBox.Show(ex.Message)
        End Try

connessione.JPG
connessione.JPG

e togliendo myconn.open e sbagliando sempre utente e password viene fuori questo
utente.JPG
utente.JPG

Chiaramente devo trovare materiale da studio e devo imparare d'altra parte chi è professionista nel campo ci è arrivato con lo studio ed è quello che ho iniziato.
Per quanto riguarda access ho lasciato perchè ogni 3 x 2 si corrompeva il DataBase.

15 Risposte

  • Re: Intercettare errori di connessione sql express 2012

    Usa una close prima della open

    P.S. buon ferragosto
  • Re: Intercettare errori di connessione sql express 2012

    Grazie compare.
    Buon ferragosto a te e famiglia.
  • Re: Intercettare errori di connessione sql express 2012

    oregon ha scritto:


    Usa una close prima della open

    P.S. buon ferragosto
    Allora il problema si è risolto per quanto riguarda la open ma rimane ancora il problema che se sbaglio volutamente o il nome utente o la password non si blocca nel try/catch ma è un messaggio di sql server che a quanto pare non interagisce con vb 2015,come risolvo il problema visto che sono agli inizi?intanto sono già a buon punto che ho capito come cambiare la password utente sempre da vs 2015 ma se prima non controllo che le credenziali di accesso siano valide non mi servirà a niente.
  • Re: Intercettare errori di connessione sql express 2012

    Quel messaggio è visualizzato dalla messaggio della catch ... perché dici di no?
  • Re: Intercettare errori di connessione sql express 2012

    Dico di no perchè per essere sicuro che il messaggio viene da sql ho disabilitato il blocco try/catch.
  • Re: Intercettare errori di connessione sql express 2012

    Prova a ripostare il codice, perche' nell'ultimo esempio avevi
    
          Try
                myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=Gestionepersonale;User Id=" & utente & ";Password=" & mypassword & ";")
                myconn.open
            Catch ex As SqlException
                MessageBox.Show(ex.Message)
            End Try
    
    e la MessageBox ovviamente si vede solo nel catch...

    salutoni romagnoli
    --
    Andrea
  • Re: Intercettare errori di connessione sql express 2012

    sistemista ha scritto:


    Dico di no perchè per essere sicuro che il messaggio viene da sql ho disabilitato il blocco try/catch.
    Se usi la catch la messagebox viene eseguita nella catch.
  • Re: Intercettare errori di connessione sql express 2012

    Allora,ricapitoliamo...
    da un form passo l'user e la password e poi chiamo la connessione
    codice:
    
    utente=txtutente.text
    mypassword=txtPassword.text
    apridb
     Select Case opzione
                Case 1
                    Me.Hide()
                    frmPostepay.Show()
                Case 2
                    Me.Hide()
                    frmsitiWeb.Show()
            End Select
    
    in questo caso ho scelto 1 frmpostepay
    questo il codice apridb
    
     Public Sub apridb()
            Try
                myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=GestionePersonale;User Id=" & utente & ";Password=" & mypassword & ";")
                myconn.Open()
            Catch ex As SqlException
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
    con il codice di sopra ho questo errore e non capisco perchè...forse sqlconnection apre la connessione?per il momento tralasciamo
    questo l'errore:
    connaperta.jpg
    connaperta.jpg

    e questo messaggio non è nel blocco try/catch come spiegato nei post precedenti,ho lasciato ora così per mostrare il codice completo.
    questo lo stesso codice senza myconn.open e funziona correttamente
    
     Public Sub apridb()
            Try
                myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=GestionePersonale;User Id=" & utente & ";Password=" & mypassword & ";")
            Catch ex As SqlException
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
    questo il codice con password sbagliata senza il blocco try/catch
    
       Public Sub apridb()
            myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=GestionePersonale;User Id=" & utente & ";Password=" & mypassword & ";")
        End Sub
    
    e questo l'errore:
    connaperta.jpg
    connaperta.jpg

    Spero di aver spiegato bene i passi che ho fatto e quello che non capisco il motivo per cui non funziona il blocco try/catch.
    Allegati:
    31506_0dd7ae2a6328b326f88abe5b667891c7.jpg
    31506_0dd7ae2a6328b326f88abe5b667891c7.jpg
  • Re: Intercettare errori di connessione sql express 2012

    Edit:ho messo un immagine di troppo e non sono riuscito ad eliminarla,,l'iimagine incriminita è quello sotto la dicitura "ho messo la password sbagliata,quella buona è la successiva.
  • Re: Intercettare errori di connessione sql express 2012

    sistemista ha scritto:


    con il codice di sopra ho questo errore e non capisco perchè...forse sqlconnection apre la connessione? [...]
    No, la creazione della connessione non la apre automaticamente: questo avviene quando si chiama il metodo Open() dell'oggetto SqlConnection, che è appositamente progettato a questo scopo.

    Il fatto che la connessione risulti già aperta nel messaggio di errore può essere dovuto a un'altra parte di codice, presente altrove ma non riportata, che effettua nuovamente l'apertura per qualche motivo, benché la connessione sia già stata aperta in precedenza.

    sistemista ha scritto:


    questo lo stesso codice senza myconn.open e funziona correttamente
    Questo confermerebbe l'ipotesi fatta qui sopra.

    sistemista ha scritto:


    Spero di aver spiegato bene i passi che ho fatto e quello che non capisco il motivo per cui non funziona il blocco try/catch.
    In realtà, il codice cambia in continuazione, e quello che viene riportato è un messaggio di errore mostrato in una message box che si trova sia in un Try...Catch sia all'esterno (quindi impedendo di capire qual è dei due), e senza però che sia evidente qual è l'uso effettivo che viene fatto dalla connessione una volta che è stata aperta in questo metodo "apridb()".

    Io cambierei il tipo di approccio: qual è l'obiettivo per cui si sta aprendo questa connessione? qual è l'operazione che viene effettivamente eseguita tramite la stessa connessione? In quel contesto di utilizzo specifico, è opportuno 1) usare il costrutto Using quando si crea la connessione usando una variabile preferibilmente locale, 2) aprire la connessione, 3) eseguire il comando desiderato per leggere o scrivere i dati sfruttando la connessione aperta, 4) al termine del comando, chiudere la connessione (viene fatto in automatico in presenza di Using), 5) preoccuparsi successivamente della gestione degli errori, magari racchiundendo il metodo con i passi sopra descritti in un costrutto Try...Catch.

    Ciao!
  • Re: Intercettare errori di connessione sql express 2012

    Alla finestra della mesagebox dagli un nome se vuoi sapere chi l'ha aperta:
    
     Public Sub apridb()
            Try
                myconn = New SqlConnection("Data Source=" & nomepc & "\SQLEXPRESS;Initial Catalog=GestionePersonale;User Id=" & utente & ";Password=" & mypassword & ";")
            Catch ex As SqlException
                MessageBox.Show(ex.Message, "controllo con Try su apridb()")
            End Try
        End Sub
    
    
  • Re: Intercettare errori di connessione sql express 2012

    Alka ha scritto:


    sistemista ha scritto:


    con il codice di sopra ho questo errore e non capisco perchè...forse sqlconnection apre la connessione? [...]
    No, la creazione della connessione non la apre automaticamente: questo avviene quando si chiama il metodo Open() dell'oggetto SqlConnection, che è appositamente progettato a questo scopo.

    Il fatto che la connessione risulti già aperta nel messaggio di errore può essere dovuto a un'altra parte di codice, presente altrove ma non riportata, che effettua nuovamente l'apertura per qualche motivo, benché la connessione sia già stata aperta in precedenza.

    sistemista ha scritto:


    questo lo stesso codice senza myconn.open e funziona correttamente
    Questo confermerebbe l'ipotesi fatta qui sopra.

    sistemista ha scritto:


    Spero di aver spiegato bene i passi che ho fatto e quello che non capisco il motivo per cui non funziona il blocco try/catch.
    In realtà, il codice cambia in continuazione, e quello che viene riportato è un messaggio di errore mostrato in una message box che si trova sia in un Try...Catch sia all'esterno (quindi impedendo di capire qual è dei due), e senza però che sia evidente qual è l'uso effettivo che viene fatto dalla connessione una volta che è stata aperta in questo metodo "apridb()".

    Io cambierei il tipo di approccio: qual è l'obiettivo per cui si sta aprendo questa connessione? qual è l'operazione che viene effettivamente eseguita tramite la stessa connessione? In quel contesto di utilizzo specifico, è opportuno 1) usare il costrutto Using quando si crea la connessione usando una variabile preferibilmente locale, 2) aprire la connessione, 3) eseguire il comando desiderato per leggere o scrivere i dati sfruttando la connessione aperta, 4) al termine del comando, chiudere la connessione (viene fatto in automatico in presenza di Using), 5) preoccuparsi successivamente della gestione degli errori, magari racchiundendo il metodo con i passi sopra descritti in un costrutto Try...Catch.

    Ciao!
    Ho ricontrollato e la connessione parte solo da un form che una volta richiamata viene chiusa da una successiva chiamata ad una tabella,comunque,per togliermi una soddisfazione ho messo una messagebox dopo la chiamata apridb e mi diche che la connessione è chiusa restituendomi 0 che equivale allo stato chiuso ma se metto myconn.open mi dice che è già aperta mah...non ci capisco niente,comunque risponderò alle tue domande in seguito.
    allego link se per curiosità vuoi dargli un occhiata sia tu che altri tanto non vi sono dati sensibili è solo un progetto con 2 form.
    https://www.dropbox.com/sh/dmebp2179zkynst/AADFmQ0sU73Oj0hbkscLpPG5a?dl=0
  • Re: Intercettare errori di connessione sql express 2012

    sistemista ha scritto:


    allego link se per curiosità vuoi dargli un occhiata [...]
    Ehm... temo che il link contenga "dati sensibili" e forse andrebbe sostituito...
  • Re: Intercettare errori di connessione sql express 2012

    Ma che cav!! di link hai inviato???
Devi accedere o registrarti per scrivere nel forum
15 risposte