Pb sur l'existence du résultat d'un textBox par rapport a la base

Résolu
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 - 1 févr. 2008 à 09:19
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 - 3 févr. 2008 à 18:47
Bonjour,

Voila j'ai une base SqlServer et mon projet sous Visual Studio.net 2003.
Dans ma base : M_IDMAT correspond au numéro des machines
Dans mon projet : NumMachine.

Je souhaiterais faire en sorte que "si NumMachine existe dans M_IDMAT alors on n'insert pas les données correspondant au machine dans la base Sinon on les inserts".

Dans ma phrase ci-dessus ce que je n'arrive pas a effectuer c'est "si NumMachine existe dans M_IDMAT".
L'insertion je sais faire.

Donc je souhaiterais savoir : Comment traduire en langage C#.NET : "si NumMachine existe dans M_IDMAT".
J'ai effectuée quelque chose mais cela ne fonctionnne pas donc j'aimerais savoir ce que vous en pensiez??

code :
if

(NumMachine==M_IDMAT){

command =

new SqlCommand("INSERT INTO INTERVENTION(IN_NUMINTER, C_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES('" + NumInter.Text + "', '" + NumClt.Text + "', '" + NumClt.Text + "','" + NumMachine.Text +"', '" + RaisonInter.Text + "', '" + Dépositaire.Text + "', '" + Réceptionneur.Text + "', '" + DatePrisEnCharge.Text + "'", connection);}

else{
command new SqlCommand("INSERT INTO MACHINE(M_IDMAT, M_NUMCLT, M_NUMCTACT, M_NOMMAT, M_CONFMAT, M_NOMUTIL, M_RAP_RESP, M_RESINTER) VALUES('" + NumMachine.Text + "', '" + NumClt.Text + "', '" + NumContact.Text + "','" + NomMachine.Text +"', '" + ConfigMachine.Text + "', '" + NomUtMachine.Text + "', '" + RespUt.Text + "', '" + RaisonInter.Text + "'", connection);command

new SqlCommand("INSERT INTO INTERVENTION(IN_NUMINTER, C_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES('" + NumInter.Text + "', '" + NumClt.Text + "', '" + NumClt.Text + "','" + NumMachine.Text +"', '" + RaisonInter.Text + "', '" + Dépositaire.Text + "', '" + Réceptionneur.Text + "', '" + DatePrisEnCharge.Text + "'", connection); }

Merci d'avance pour votre aide!!

<!-- / message -->
<!-- sig -->

13 réponses

loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
2 févr. 2008 à 11:30
merci a toi d'avoir voulu m'aider, mais j'ai trouvé une autre façon de faire auquel j'ai bien avancé. Enfin cela fonctionne bof car ça m'enregistre pas les données dans ma base mais bon.
Si ca t'intérresse voici le code :
privatevoid Imprimer_Click(object sender, System.EventArgs e)
{
// DECLARATIONS
string RequeteSQL;
SqlConnection connection;
SqlCommand command;
SqlDataAdapter _MonDataAdapter;
System.Data.DataTable _MaDataTable;
 
// CONNEXION
connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI");
 
try
{
connection.Open();
 
// RECUPERER LA LISTE DES MACHINES QUI ONT POUR NUMERO NUMMACHINE.TEXT
RequeteSQL = "SELECT M_IDMAT FROM MACHINE WHERE M_IDMAT='" + NumMachine.Text + "'";
 
_MonDataAdapter = new SqlDataAdapter(RequeteSQL, connection);
 
_MaDataTable = new DataTable();
_MonDataAdapter.Fill(_MaDataTable);
 
// SI IL N'Y EN A PAS
if(_MaDataTable.Rows.Count == 0)
{
command = new SqlCommand("INSERT INTO MACHINE(M_IDMAT, M_NUMCLT, M_NUMCTACT, M_NOMMAT, M_CONFMAT, M_NOMUTIL, M_RAP_RESP, M_RESINTER) VALUES('" + NumMachine.Text + "', '" + NumClt.Text + "', '" + NumContact.Text + "','" + NomMachine.Text + "', '" + ConfigMachine.Text + "', '" + NomUtMachine.Text + "', '" + RespUt.Text + "', '" + RaisonInter.Text + "'", connection);
command.ExecuteNonQuery();

command = new SqlCommand("INSERT INTO INTERVENTION(IN_NUMINTER, C_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES('" + NumInter.Text + "', '" + NumClt.Text + "', '" + NumClt.Text + "','" + NumMachine.Text + "', '" + RaisonInter.Text + "', '" + Dépositaire.Text + "', '" + Réceptionneur.Text + "', '" + DatePrisEnCharge.Text + "'", connection);
command.ExecuteNonQuery();
}
// SI IL Y EN A 1 OU PLUS
elseif(_MaDataTable.Rows.Count > 0)
{
command = new SqlCommand("INSERT INTO INTERVENTION(IN_NUMINTER, C_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES('" + NumInter.Text + "', '" + NumClt.Text + "', '" + NumClt.Text + "','" + NumMachine.Text + "', '" + RaisonInter.Text + "', '" + Dépositaire.Text + "', '" + Réceptionneur.Text + "', '" + DatePrisEnCharge.Text + "'", connection);
command.ExecuteNonQuery();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
connection.Close();
}
}

merci pour tout!!
3
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
1 févr. 2008 à 10:46
essaye de faire un truc comme ca:

commandselect = new sqlcommand ("Select M_IDMAT ...");
Typeretour mIdMat = (
Typeretour)
commandselect .executeScalar();
if (NumMachine==
mIdMat)
{
 ...

Nul ne devient grand par la guerre...
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
1 févr. 2008 à 11:01
voila ce que ca me donne :
code :
command =
new SqlCommand ("Select M_IDMAT FROM MACHINE WHERE M_IDMAT'" + NumMachine.Text + "'");Typeretour mIdMat (Typeretour) commandselect .executeScalar();

if (NumMachine==mIdMat){

command =

new SqlCommand("INSERT INTO INTERVENTION(IN_NUMINTER, C_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES('" + NumInter.Text + "', '" + NumClt.Text + "', '" + NumClt.Text + "','" + NumMachine.Text +"', '" + RaisonInter.Text + "', '" + Dépositaire.Text + "', '" + Réceptionneur.Text + "', '" + DatePrisEnCharge.Text + "'", connection);}

else{
command new SqlCommand("INSERT INTO MACHINE(M_IDMAT, M_NUMCLT, M_NUMCTACT, M_NOMMAT, M_CONFMAT, M_NOMUTIL, M_RAP_RESP, M_RESINTER) VALUES('" + NumMachine.Text + "', '" + NumClt.Text + "', '" + NumContact.Text + "','" + NomMachine.Text +"', '" + ConfigMachine.Text + "', '" + NomUtMachine.Text + "', '" + RespUt.Text + "', '" + RaisonInter.Text + "'", connection);command

new SqlCommand("INSERT INTO INTERVENTION(IN_NUMINTER, C_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES('" + NumInter.Text + "', '" + NumClt.Text + "', '" + NumClt.Text + "','" + NumMachine.Text +"', '" + RaisonInter.Text + "', '" + Dépositaire.Text + "', '" + Réceptionneur.Text + "', '" + DatePrisEnCharge.Text + "'", connection); }

mais mon problème c'est qu'il me dit les erreurs suivantes :
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\NouvelleIntervention.cs(701): Le nom 'mIdMat' n'existe pas dans la classe ni dans l'espace de noms 'SuiviClient_Distrib_Info.NouvelleIntervention'

C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\NouvelleIntervention.cs(700): Le type ou le nom d'espace de noms 'Typeretour' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)

comment je peux faire pour résoudre ces problèmes??

merci d'avance!!
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
1 févr. 2008 à 11:16
...

faut prendre plus de café le matin...

typeretour est bien sur a remplacer par le type de ton champs
string si c'est un Varchar, int si c'est un entier... ca me paraissait pourtant logique...

Nul ne devient grand par la guerre...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
1 févr. 2008 à 11:18
ah oui, en passant,
utilise des requetes paramétrées, ca t'eviteras des problemes...
(il y a des exemples de l'utilisation des requetes paramétrées sur ce site...)

Nul ne devient grand par la guerre...
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
1 févr. 2008 à 11:23
ben faudrait déja que j'en boive du café!!LOL.

J'avou j'aurais pu le voir mais bon faut croire que je suis pas logique!!

pour un numérique, je met entier je pense??

Mais même si je change Typeretour, ca m'affiche toujours les erreurs suivantes :
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\NouvelleIntervention.cs(700): 'System.Data.SqlClient.SqlCommand' ne contient pas de définition pour 'executeScalar'
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\NouvelleIntervention.cs(701): L'opérateur '==' ne peut pas être appliqué aux opérandes de type 'System.Windows.Forms.TextBox' et 'int'

j'y réfléchi mais si ta une idée, n'hésite pas.
merci d'avance!!
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
1 févr. 2008 à 11:57
pour executeScalar, manque juste une majuscule... http://msdn2.microsoft.com/fr-fr/library/system.data.sqlclient.sqlcommand.executescalar(VS.80).aspx

pour l'autre erreur, c'est normal, textbox est un objet complexe (il s'agit de ta boite au complet...),
tu dois donc utiliser l'une des propriétés de ta textbox... (tu aurais du le preciser avant qu'il s'agissait d'une textbox...)
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemwindowsformstextboxmemberstopic.asp

il faut que tu utilise le texte de ta textbox et que tu le cast en int pour pouvoir le comparer a la valeur retournée par ton select...

Nul ne devient grand par la guerre...
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
1 févr. 2008 à 14:13
donc tu es entrain dme dire que pour la TextBox, je dois faire :
code :
NumMachine NM = new NumMachine();
NM.Text = "Hello World!";

mais je vois pas ce que je peux mettre a la place de "Hello World!"??

merci d'avance
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
1 févr. 2008 à 14:33
non, ce que je te dis c'est que d'apres ce que je vois numMachine est une textbox
donc si tu veux utilise la valeur renvoyée par cette textbox, tu fais ca:

int valNumMachine = int.tryParse(numMachine.Text);

sachant qu'il te reste a gerer le cas ou l'utilisateur n'a pas remplis numMachine...

Nul ne devient grand par la guerre...
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
1 févr. 2008 à 14:41
ok. Mais
code :
int valNumMachine = int.tryParse(numMachine.Text);

doit se placer ou??

désolé de t'embéter autant mais j'ai besoin d'aide car je comprend pas tout!!LOL.

merci d'avance!!
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
1 févr. 2008 à 14:53
je vois ca...
si tu reflechis un peu, cette expression te permet de recupérer au format entier la valeur saisie dans ton textbox (la valeur du textbox n'est pas changée...)
donc tu dois l'utiliser juste avant de t'en servir...
donc avant ton test...

Nul ne devient grand par la guerre...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
3 févr. 2008 à 15:38
Salut,

Et sinon à part ça la suggestion de Miltiades en première page, consistant à utiliser des requêtes paramétrées n'était pas une blague, loin de là.
A moins que les trous de sécurité, les corruptions ou pertes de données soient des fonctionnalités de l'application.

/*
coq
MVP Visual C#
CoqBlog
*/
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
3 févr. 2008 à 18:47
Je n'en doute pas que la suggestion de Miltiades est une bonne solution.

Mais le principal c'est que mon application fonctionne parfaitement.

merci quand même pour vos conseils.
0
Rejoignez-nous