Comment vérifier un enregistrement sur BD avec C#.. [Résolu]

namous35
Messages postés
6
Date d'inscription
dimanche 25 février 2007
Dernière intervention
3 février 2008
- 30 sept. 2007 à 02:14 - Dernière réponse : bidou_01
Messages postés
135
Date d'inscription
dimanche 1 octobre 2006
Dernière intervention
19 mai 2008
- 14 oct. 2007 à 14:11
Bonjour les amis,

Voilà je suis un débutant en C# et je demande de l'aide concernant une vérification si un enregistrement existe sur une table SQL ou pas et tout ça evec C#.
 
donc j'ai une table SQL, une interface web evec deux textboxs qui pointent sur ma table et biensûr un bouton pour valider la saisie.

ce que je veux faire c'est éviter d'avoir des doublons sur ma Table SQL et ce en instorant une méthode pour tester si les données saisies existent déjà sur ma BD ou pas.

j'ai pu mettre mon bloc d'instructions pour la saisie ds donnée comme suit :

<--------------------------------------------------------------->


void BT_Send_Click(object sender, EventArgs e)
{

    // Déclaration de l'objet de connexion
    System.Data.SqlClient.SqlConnection oConnection;

    // Création de l'objet de connexion
    oConnection = new System.Data.SqlClient.SqlConnection();

    // Paramétrage de la chaîne de connexion
    string sConnectionString;
    sConnectionString = " Server = <Server>; Initial Catalog = ; uid = <Login>; password = ";
    oConnection.ConnectionString = sConnectionString;

    // Connexion à la base de données
    oConnection.Open();

    // Déclaration de l'objet SqlCommand et de la requête SQL
    System.Data.SqlClient.SqlCommand oCommand;
    string sSQL;

    // Ecriture de la requête SQL
    sSQL = "INSERT INTO [Liste](Nom,Prenom)";
    sSQL = sSQL + " VALUES('" + TBox_Nom.Text + "','" + TBox_Prenom.Text + "')";

    // Création de l'objet SqlCommand
    oCommand = new System.Data.SqlClient.SqlCommand(sSQL,oConnection);

    // On appelle la méthode ExecuteNonQuery pour éxécuter notre commande
    oCommand.ExecuteNonQuery();

    // On écrit notre message de confirmation
    LB_Message.Text = "Les données suivantes " + TBox_Nom.Text + TBox_Prenom.Text + " ont correctement été créées !";

    // On rend le message visible
    LB_Message.Visible = true;

    // Fermeture de la connexion
    oConnection.Close();

}
<--------------------------------------------------------->
voilà j'ai testé ce code et ça marche pour la saisie, ce que je voudrait rajouter c'est la partie vérification, comment est-ce que ça se presente et où dois je la mettre ??

un bout de code avec explication m'aiderai bcp.

merci les amis

____________
 C-Shark
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 30 sept. 2007 à 10:26
3
Merci
Salut,

Tu ne devrais pas mettre ta chaine de connexion dans le code mais dans le fichier de configuration de l'application.

Pas de concatnéation de chaine de caractères pour les valeur, surtout comme ça sans aucun contrôle de la saisie utilisateur !
=> http://www.csharpfr.com/tutoriaux/UTILISATION-REQUETES-PARAMETREES-AVEC-ADO-NET_709.aspx
=> http://www.csharpfr.com/tutoriaux/COMMENT-FAIRE-REQUETE-PARAMETREE-DANS-BASE-DONNEE_710.aspx

Pour la vérification, une requête SELECT avec filtrage sur le nom et le prénom devrait suffire.
En oubliant pas les contraintes qui vont bien sur la base pour s'assurer quand même que les données ne soient pas incohérentes, je pense notamment à une insertion par un autre utilisateur de l'application entre la vérification et l'insertion.
Par contre n'oublie pas que les couples nom/prénom ne sont pas forcément uniques : tu peux très bien te retrouver avec 2 personnes distinctes portant les mêmes noms et prénoms.

Et ajoute aussi les structures de gestion d'erreur (try/catch/finally) pour t'assurer de tout faire pour que la connexion soit fermée quoi qu'il arrive.

/*
coq
MVP Visual C#
CoqBlog
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_coq
bidou_01
Messages postés
135
Date d'inscription
dimanche 1 octobre 2006
Dernière intervention
19 mai 2008
- 14 oct. 2007 à 14:11
1
Merci
Bonjour,

Le plus simple que tu puisses faire c'est de créer un Index SQL Server au niveau de ta base de données, basé sur la clé primaire, le nom et le prénom. Ainsi tu ne pourra pas avoir 2 lignes ayant même PK, nom et prénom. Comme la dit coq, tu ne peux pas te baser sur un test nom+prenom, car plusieurs personnes peuvent avoir les mêmes nom et prénom.

L'index permettra de renvoyer une erreur en cas de doublons, que tu peux attraper dans le code à l'aide d'un bloc try/catch.

En plus un index favorise la recherche des données dans la bases, quand le nombre d'entrées commence à être très élevé.

Tu trouvera plus d'explications ici

Cordialement,

Bidou_01
Commenter la réponse de bidou_01
namous35
Messages postés
6
Date d'inscription
dimanche 25 février 2007
Dernière intervention
3 février 2008
- 30 sept. 2007 à 11:23
0
Merci
Bonjour Mon ami,

je ne vais pas prendre en consideration si les données "Nom et Prenom" peuvent être rentrée plusieurs fois ou pas, je vais prendre l'hypothèse que ça soit une et seule fois sur la BD.

normalement je dois déclaré une classe Bool comme c'est illustré là-dessous (c'est un bout de code que j'ai trouvé sur le net mais pas bien clair pour moi (je suis débutant comme vous le savez )).

est-il possible de me donner un petit éclairecissement par rapport à tout celà et comment dois je engagé l'insertion juste après vérification au cas où la donnée n'existe pas sur ma BD

merci encore

<----------------------------------------------------------------------->
protectedbool CheckBase(Nom,Prenom)
{
//Nbre de lignes affectées
bool bValid = true
// Déclaration de l'objet de connexion
System.Data.SqlClient.SqlConnection oConnection;
// Création de l'objet de connexion
oConnection = new System.Data.SqlClient.SqlConnection();
// Paramétrage de la chaîne de connexion
string sConnectionString;
sConnectionString = Server = <Server>; Initial Catalog = ; uid = <Login>; password = ";
oConnection.ConnectionString = sConnectionString;
// Connexion à la base de données
oConnection.Open();
// Déclaration de l'objet SqlCommand et de la requête SQL
System.Data.SqlClient.SqlCommand oCommand;
string sSQL;sSQL "SELECT Nom,Prenom from  [Liste] where Nom "+TBox_Nom.Text +" and Prenom = " +TBox_Prenom.Text ;
 
// Création de l'objet SqlCommand
oCommand = new System.Data.SqlClient.SqlCommand(sSQL, oConnection);
// On appelle la méthode ExecuteNonQuery pour éxécuter notre commande
if(oCommand.ExecuteNonQuery() > 0)
bValid = false;
 
return bValid
}

if(CheckBase(TBox_Nom.Text , TBox_Prenom.Text ))
...............

<----------------------------------------------------------------------->
____________
 C-Shark
Commenter la réponse de namous35
namous35
Messages postés
6
Date d'inscription
dimanche 25 février 2007
Dernière intervention
3 février 2008
- 1 oct. 2007 à 11:27
0
Merci
Salut les amis,

est-ce que vous pouvez m'aider sur ce sujet là ou bien m'indiquer une autre méthode plus simple pour faire le test que je veux faire ??

merci les gars.

____________
 C-Shark
Commenter la réponse de namous35

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.