IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Verifier si un enregistement existe


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut Verifier si un enregistement existe
    Bonjour,

    J'ai une base de données sous SqlServer contenant une table, cette dernière comporte 3 colonnes.

    A partir d'un formulaire web, je cherche à insérer un enregistrement dans cette table si ce dernier n'existe pas (Contrainte UNIQUE). S'il existe, je veux afficher le message correspondant.

    Merci d'avance pour votre aide !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    salut,

    Si tu utilise une DataTable, tu peux utiliser la methode DataRow.find(), qui recherchera l'index avec la cle primaire

    http://msdn.microsoft.com/fr-fr/libr...yk(VS.80).aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	if(MaTable.Rows.Find(ValuerDeClePrimaire) != null)
    	{
    		System.Windows.Forms.MessageBox.Show("La ligne existe déja");
    	} else {
    		// inserer la ligne
    	}

    Sinon avec une SqlDataSource, tu peux utiliser l'evènement OnInserted (déclenché apres une insertion) et vérifier qu'une exception n'est pas levée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    protected void MaSource_Inserted(Object sender, SqlDataSourceStatusEventArgs e)
    {
    	if(e.ExceptionHandled)
    	{
    		string Msg = "Erreur d'insertion : " + e.Exception.GetBaseException().Message; // attention à éviter de donner des infos sensibles à l'utilisateur
    		System.Windows.Forms.MessageBox(Msg);
    	}
    }

    http://msdn.microsoft.com/fr-fr/libr...ed(VS.80).aspx

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Sinon si tu es bon en sql tu peux egalement ecrire la condition en sql du style Not Exists (select ....), c'est parfois meme mieux car on ne connait pas trop le fonctionnement de ce qui se cache derrière les outils asp.

  4. #4
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    avec une procédure stockée, tu peux testé si l'enregistrement existe et si il n'existe pas, tu fais l'insertion. Tu peux demander à ce que la procdure te renvoit un boolean pour savoir si l'enregistrement a été inséré ou non

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Citation Envoyé par flogreg Voir le message
    avec une procédure stockée, tu peux testé si l'enregistrement existe et si il n'existe pas, tu fais l'insertion. Tu peux demander à ce que la procdure te renvoit un boolean pour savoir si l'enregistrement a été inséré ou non
    Oui, cette solution m'interesse. Alors comment créer cette procédure ?

    Merci à tous...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Par défaut
    Je pense que le plus simple est d'insérer dans la table. La contrainte UNIQUE provoquera un message d'erreur si la valeur est déjà présente.

    Exemple

    Côté SQL avec une table ma_table(ma_colonne CHAR(3) UNIQUE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE PROCEDURE I_ma_table
    	@Valeur VARCHAR(3)
    AS
    	INSERT ma_table(ma_colonne) VALUES (@Valeur)
    GO
    Côté ASP.NET/C#. On exécute la procédure stockée et on gère le cas ou on a un code retour 2627 (violation de contrainte UNIQUE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    using (SqlConnection Connexion = new SqlConnection("CHAINE_CONNEXION"))
    {
    	using(SqlCommand Commande = new SqlCommand("I_ma_table", Connexion))
    	{
    		Commande.CommandType = CommandType.StoredProcedure;
     
    		Commande.Parameters.Add(new SqlParameter("@valeur", SqlDbType.Char,3));
    		Commande.Parameters["@valeur"].Value = "XXX";
     
    		Commande.Parameters.Add(new SqlParameter("RETURN_VALUE", SqlDbType.Int));
    		Commande.Parameters["RETURN_VALUE"].Direction=ParameterDirection.ReturnValue;
     
    		Connexion.Open();
     
    		try
    		{
    			Commande.ExecuteNonQuery();
    		}
    		catch(SqlException ExceptionInsertion)
    		{
                if (Commande.Parameters["RETURN_VALUE"].Value!=null)
                {
    			    if ((Int32)Commande.Parameters["RETURN_VALUE"].Value==2627)
    			    {
                        //GESTION ERREUR
    			    }
    			    else 
    			    {
    				    throw (ExceptionInsertion);
    			    }
                }
    		}
    	}
    }
    J'ai juste un petit doute sur les performances car il me semble avoir lu qu'il fallait éviter les try...catch. Mais après tout, il s'agit d'exceptions
    ________________________________
    Seminoque, créateur de
    http://www.bingokaz.com

Discussions similaires

  1. [XSLT]verifier si un noeud existe deja
    Par davelo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/03/2006, 16h47
  2. verifier si un fichier existe
    Par franfr57 dans le forum ASP
    Réponses: 7
    Dernier message: 12/02/2006, 10h08
  3. Verifier qu'un champ existe en vba
    Par dynxd dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 17h10
  4. Réponses: 2
    Dernier message: 05/09/2005, 16h32
  5. Verifier qu'un dossier existe (batch)
    Par kakou dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/01/2003, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo