Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C# - SqlServer] Capire quale vincolo ha generato l'eccezione

    Ciao a tutti!

    Sono nuovo di SQL Server, abbiamo iniziato quest'anno a studiarlo a scuola, e ho bisogno di un aiuto.

    Mi scuso anticipatamente se è la sezione sbagliata, ma non ne ho trovata una per SqlServer.

    Il mio problema è semplice.

    Sto creando un piccolo sito, e ho creato una pagina di registrazione, nella quale si inseriscono i dati che poi si inseriranno in un database.

    Nel database sono presenti 2 vincoli, i quali dicono che UserName e Mail devono essere Unique

    codice:
    ALTER TABLE Utenti ADD CONSTRAINT Unique_User UNIQUE (UserName)
    stessa cosa ma con nome diverso per la password.

    Dal programma inserisco il tutto in un blocco try catch, in modo da intercettare l'eccezione causata dalla violazione dei vincoli. Il mio problema è capire QUALE dei vari vincoli ha generato l'eccezione, in modo da poter inserire ad esempio "Mail già in uso" ecc...

    Come posso fare?

    Ho provato con SqlException, ma non riesco a capire se è presente una proprietà che specifica il vincolo che ha causato l'eccezione.

    Grazie!

  2. #2
    nell'eccezzione dovebbe dirti il nome della colonna unique che ha generato il problema o cmq il nome del constraint ... Nel blocco Catch definisci un exception generica tipo :

    try
    {
    ....
    }
    catch(Exception EX)
    {
    if (EX.ToString().Contains("nome_colonna_1"))
    {
    //stampi a video nome utente gia usato
    }
    if (EX.ToString().Contains("nome_colonna_2"))
    {
    //stampi a video email gia usato
    }

    }


    Per vedere cosa ti da l'eccezione nei due casi puoi usare una seplice Label
    e mettere nel blocco catch l'istruzione : Label1.Text = EX.ToString();
    Così resci a vedere esattamente nei due casi cosa ti restituisce e metti la stringa giusta nella funzione contains.
    OUTSHINE '84

  3. #3
    Allora è come avevo pensato io ^^

    Grazie per la risposta, è solo che speravo ci fosse un qualche metodo per evitare il contains, del tipo una proprità che conteneva direttamente il valore del vincolo che aveva generato l'eccezione. Ho infatti paura che ci possano essere 2 eccezioni che contengono la stessa stringa.

    Grazie mille ancora!

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.