Comment vérifier un enregistrement sur BD avec C#..

Résolu
namous35 Messages postés 6 Date d'inscription dimanche 25 février 2007 Statut Membre Dernière intervention 3 février 2008 - 30 sept. 2007 à 02:14
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre 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

4 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
30 sept. 2007 à 10:26
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
*/
3
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 1
14 oct. 2007 à 14:11
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
1
namous35 Messages postés 6 Date d'inscription dimanche 25 février 2007 Statut Membre Dernière intervention 3 février 2008
30 sept. 2007 à 11:23
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
0
namous35 Messages postés 6 Date d'inscription dimanche 25 février 2007 Statut Membre Dernière intervention 3 février 2008
1 oct. 2007 à 11:27
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
0
Rejoignez-nous