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

C# Discussion :

TextBox,sqlDataAdapter, dataset et dataGrid.


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut TextBox,sqlDataAdapter, dataset et dataGrid.
    Bonjour à tous!

    Je dispose de 2 fomulaires: L'un est composé d'un dataGrid, l'autre de plusieurs textBox avec lesquelles on est censé pouvoir ajouter des données dans le dataset, le dataAdapter, etc...

    Sauf que, ce ne fonctionne pas! Voici un bout du code pour comprendre mon problème:

    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
     
    			try
    			{
    				Cnx2.Open();
     
    				SqlCommand sel = new SqlCommand("sqlSelectCommand1",Cnx2);
     
    				SqlCommand req = new SqlCommand("INSERT INTO MATERIELS (ID, Nom, SN, Type, Modele, Site, Service, Date_Entree," +
    					"Date_Sortie, Fin_Leasing, IP, MAC, Num_Cde, Num_Immo, Num_Contrat, Date_Inventaire, Commentaires)VALUES"+
    					"("+TBID.Text+","+TBNom.Text+","+TBSN.Text+","+LBType.SelectedItem.ToString()+","+LBModele.SelectedItem.ToString()+""+
    					","+LBsite.SelectedItem.ToString()+","+LBServ.SelectedItem.ToString()+","+TBDE.Text+","+TBDS.Text+","+TBFleas.Text+""+
    					","+TBIP.Text+","+TBMAC.Text+","+TBCde.Text+","+TBImmo.Text+","+TBCont.Text+","+TBInv.Text+","+RTB.Text+"",Cnx2);
     
    				req.ExecuteNonQuery();
    				sqlDataAdapter1.Update(dsMateriel1, "MATERIELS");
    				Cnx2.Close();
     
    				MessageBox.Show("Materiel Inséré avec succès!");
    			}
    			catch(Exception EX)
    			{
    				MessageBox.Show(EX.Message);
    			}
    		}
    Voyez-vous quelque chose qui ne va pas, un truc mal placé ou manquant? Parce que là, je bloque totalement...
    De plus, un message d'erreur apparaît en disant que le contenu de ma 'TBnom' "n'est pas autorisé dans ce contexte. Les expressions valides sont des constantes, des expressions constantes, et dans certains cas, des variables. Les noms de colonne ne sont pas autorisés".

    Merci à ceux qui répondrons!

  2. #2
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Salut,

    Commence par modifier ta requete en ajoute les simples cotes ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SqlCommand req = new SqlCommand("INSERT INTO MATERIELS (ID, Nom, SN, Type, Modele, Site, Service, Date_Entree," +
    					"Date_Sortie, Fin_Leasing, IP, MAC, Num_Cde, Num_Immo, Num_Contrat, Date_Inventaire, Commentaires)VALUES"+
    					"('"+TBID.Text+"','"+TBNom.Text+"','"+TBSN.Text+"','"+LBType.SelectedItem.ToString()+"','"...
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    Merci pour ta réponse! =)

    Cela a l'air de fonctionner, mais un message d'erreur apparaît:
    "Le format de la chaine d'entrée est incorrect."
    Peux-tu m'expliquer ce que cela signifie?
    Est-ce que cette erreur est due au fait que je ne rempli pas certaines textBox de mon formulaire, ou, sachant que j'ai quelques dates à fournir, il me manque une ligne de code pour convertir ces dates afin de les enregistrer dans la BDD? (BDD SQL SERVER, type DateTime pour les dates).

    Merci d'avance pour ton aide précieuse.

  4. #4
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Si tu utilises les requêtes paramétrées, tu évites bien des soucis de conversion de chaines, de dates etc...

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Ouais... Et il faut aussi veiller à empêcher les injections sql !!!

  6. #6
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par kheironn Voir le message
    Ouais... Et il faut aussi veiller à empêcher les injections sql !!!
    A ce que je sache les requêtes paramétrées résolvent déjà ce problème d'injections sql
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Tout à fait. Je parlais par rapport au code d'origine où les propriétés Text des textboxes étaient directement envoyées dans la requête.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    Merci pour vos réponses, et votre petit débat.
    Ainsi donc, j'ai choisi d'utiliser une requête paramétrée pour mon insertion.
    MAIS, il y a encore un ou deux problème. Je vous expose mon code, et vous explique mon problème par la suite:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    //Connexion à la base de données:
    			Cnx2.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
    			SqlCommand cmd;
    			string req;
     
     
    			//REQUÊTE PARAMETREE POUR L'INSERTION:
    			try
    			{
    				Cnx2.Open();
     
    				req = "INSERT INTO MATERIELS (Nom, SN, Type, Modele, Site, Service, Date_Entree,"+
    					"Date_Sortie, Fin_Leasing, IP, MAC, Num_Cde, Num_Immo, Num_Contrat, Date_Inventaire, Commentaires)VALUES"+
    					"(@nom,@sn,@type,@modele,@site,@service,@datee,@dateS,@fleas,@ip,@mac,@cde,@nimmo,@con,@inv,@comm)";
     
    				cmd = new SqlCommand(req,Cnx2);
     
    				//Création et déclaration des paramètres:
    				cmd.Parameters.Add("@nom",System.Data.SqlDbType.NVarChar, 20, "Nom");
    				cmd.Parameters.Add("@sn",System.Data.SqlDbType.NVarChar, 50, "SN");
    				cmd.Parameters.Add("@type",System.Data.SqlDbType.NVarChar, 20, "Type");
    				cmd.Parameters.Add("@modele",System.Data.SqlDbType.NVarChar, 30, "Modele");
    				cmd.Parameters.Add("@site",System.Data.SqlDbType.NVarChar, 10, "Site");
    				cmd.Parameters.Add("@service",System.Data.SqlDbType.NVarChar, 50, "Service");
    				cmd.Parameters.Add("@dateE",System.Data.SqlDbType.DateTime, 20, "Date_Entree");
    				cmd.Parameters.Add("@dateS",System.Data.SqlDbType.DateTime, 20, "Date_Sortie");
    				cmd.Parameters.Add("@fleas",System.Data.SqlDbType.DateTime, 20, "Fin_Leasing");
    				cmd.Parameters.Add("@ip",System.Data.SqlDbType.NVarChar, 15, "IP");
    				cmd.Parameters.Add("@mac",System.Data.SqlDbType.NVarChar, 35, "MAC");
    				cmd.Parameters.Add("@cde",System.Data.SqlDbType.NVarChar, 50, "Num_Cde");
    				cmd.Parameters.Add("@nimmo",System.Data.SqlDbType.NVarChar, 50, "Num_Immo");
    				cmd.Parameters.Add("@con",System.Data.SqlDbType.NVarChar, 50, "Num_Contrat");
    				cmd.Parameters.Add("@inv",System.Data.SqlDbType.DateTime, 20, "Date_Inventaire");
    				cmd.Parameters.Add("@comm",System.Data.SqlDbType.NVarChar, 100, "Commentaires");
     
    				//Attribution des valeurs aux paramètres:
    				cmd.Parameters["@nom"].Value = TBNom.Text;
    				cmd.Parameters["@sn"].Value = Convert.ToString(TBSN.Text);
    				cmd.Parameters["@type"].Value = Convert.ToString(LBType.SelectedValue);
    				cmd.Parameters["@modele"].Value = Convert.ToString(LBModele.SelectedValue);
    				cmd.Parameters["@site"].Value = Convert.ToString(LBsite.SelectedValue);
    				cmd.Parameters["@service"].Value = Convert.ToString(LBServ.SelectedValue);
    				cmd.Parameters["@dateE"].Value = Convert.ToDateTime(TBDE.Text);
    				cmd.Parameters["@dateS"].Value = Convert.ToDateTime(TBDS.Text);
    				cmd.Parameters["@fleas"].Value = Convert.ToDateTime(TBFleas.Text);
    				cmd.Parameters["@ip"].Value = TBIP.Text;
    				cmd.Parameters["@mac"].Value = TBMAC.Text;
    				cmd.Parameters["@cde"].Value = TBCde.Text;
    				cmd.Parameters["@nimmo"].Value = TBImmo.Text;
    				cmd.Parameters["@con"].Value = TBCont.Text;
    				cmd.Parameters["@inv"].Value = Convert.ToDateTime(TBInv.Text);
    				cmd.Parameters["@comm"].Value = RTB.Text;
     
    				cmd.ExecuteNonQuery();
    				cmd.Connection.Close();
     
    			}
    			catch(Exception EX)
    			{
    				MessageBox.Show(EX.Message);
    			}
    Il semblerais donc, d'après les executions, que:
    -Les TextBox vides peuvent être enregistrées, mais une erreur apparait toujours:
    Le format de chaine d'entrée est incorrect.
    -Une TextBox vide devant contenir une date empêche l'enregistrement complet d'une ligne. L'erreur est la suivante:
    La chaîne n'as pas été reconnue en tant que DateTime valide.
    -Lorsque je saisie toute les TextBox qui doivent acceuillir une date, et que je ne remplit pas les autres, la ligne s'enregistre dans la BDD + Dataset qui se met à jour.Mais, Malgrès tout, l'erreur :
    Le format de chaine d'entrée est incorrect.
    se manifeste toujours.

    Principalement, je voudrais pouvoir enregistrer une TextBox dans laquelle rien n'a été saisi par l'utilisateur.

    Je crois sérieusement que je livre une guerre sans fin avec ces foutues dates... Ou j'suis vraiment trop naze pour les utiliser comme il le faut.

    En tout cas, ceux qui me répondront, un grand grand merci à vous!

  9. #9
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Pour les champs de la base qui acceptent null (normalement tous ceux correspondant aux txt pouvant être vides, à moins qu'il n'y ait des default values), utilises une formule du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.IsNullOrEmpty(maTxtBox.Text) == true ? DBNull : maTxtBox.Text
    c'est aussi valable pour les dates.

    Quand il n'y a pas de donnée, alors il faut le dire à la DB.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    Merci pour ta réponse,

    J'ai décidé de faire autrement; voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(TBNom.Text!="")
    				{
    					cmd.Parameters["@nom"].Value = TBNom.Text;
    				}
    				else
    				{
    					cmd.Parameters["@nom"].Value = System.DBNull.Value;
    				}
    //ECT
    Pour ceux qui auraient eu le même problème que moi, voici quelques explications:

    Si la TxtBox n'est pas nulle, on lui assigne la valeur saisie dans la txtBox
    sinon, valeur nulle avec le
    System.DBNull.value
    C'est aussi simple que ça!

    Merci à tous de m'avoir accordé un peux de temps!
    Ciaooooo!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. renseigner un textbox via dataset et DataAdapter
    Par bigrackham dans le forum Débuter
    Réponses: 4
    Dernier message: 27/10/2008, 11h45
  2. mise à jour d'une BD sqldataadapter dataset
    Par salihovic dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/12/2007, 13h26
  3. TextBox = Sum(Colonne de Datagrid)
    Par BM42 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/02/2007, 10h34
  4. [C#] Dataset et DataGrid
    Par kinou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 31/08/2006, 14h13
  5. [C#] DataSet et DataGrid
    Par madica dans le forum C#
    Réponses: 2
    Dernier message: 09/11/2005, 20h11

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