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 :

inserer , ado.net et datagriview


Sujet :

C#

  1. #1
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut inserer , ado.net et datagriview
    bonjour à tous,
    je suis un jeunne débutant c#, qui aimerais inserer dans une table sous sql serveur 2008 les données provenant d'un datagridview sous c#.
    voici la requette que j'utilise:
    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
        string strinsertion="";
                for (int i = 0; i < DtgConseiller.Rows.Count - 1; i++)
                {
                    try
                    {
                        if (DtgConseiller.Rows[i].Cells[0].Value.ToString() == "True")
                        {
                            strinsertion = " Insert into edition_conseiller values'" + (Environment.MachineName + "'," +
                                                                                    DtgConseiller.Rows[i].Cells[1].Value.ToString() + "," +
                                                                                    DtgConseiller.Rows[i].Cells[2].Value.ToString() + "," +
                                                                                    DtgConseiller.Rows[i].Cells[3].Value.ToString() + "," +
                                                                                    CodeIntermediaire + ", '1','1'");
                            SqlConnection oConnection = new SqlConnection(strConnexion);
                            SqlCommand oCommand = new SqlCommand(strinsertion, oConnection);
                            oConnection.Open();
                            oCommand.ExecuteNonQuery();
                            oConnection.Close();
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(" l erreur suivante c'est produite :" + ex.Message);
                    }
                }
    voici les difficultes que je rencontre:
    1- je ne sais pas si je teste bien les colonnes selectionnés de mon datagrid
    2- que faire des valeur null qui se trouve dans colonne 3 de mon datagrid
    3- la concatenation des valeurs dans strinsertion semble ne pas etre très bonne.

    Merci de votre précieux soutient.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    Effectivement cette manière de faire n'est pas très recommandable !

    Je te donne quelques pistes :
    Regarde du côté du BingingSource. Il faut que tu crées une classe qui représente une ligne de tes données, ton BindingSource aura comme source une List<TonObjet> et comme source de ton DataGridView le BindingSource.

    Pour la requête d'insertion, regarde du côté des requêtes paramétrées ! (maintes fois évoquées ici et ailleurs!)

    Bon courage, et si tu as des problèmes n'hésite pas à repasser par ici !

  3. #3
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    Merci Jaco67,
    pour les requettes parametrés sa va, j'ai fait des recherche dessus et je commence à voir ce qu'il faut faire car je les très bien avec le transact sql.
    mais pour le datagridview j'aimerai avoir plus de précision de ta part car je n'y comprend rien pour le moment!
    merci de ton soutient.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Je pars de la supposition suivante : ton datagridview affiche des conseillers avec une colonne genre (M/F), nom, prénom.

    Tu auras donc une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Conseiller
    {
        public string Genre {get;set;}
        public string Nom {get;set;}
        public string Prenom {get;set:}
     
        public Conseiller() {}
    Dans le designer, tu cliques-glisses un BindingSource sur ton form. En DataSource tu mets la classe Conseiller (il faudra générer le projet entre temps pour que VS le trouve).

    Toujours dans le designer, en DataSource de ton dgv tu mets le BindingSource. VS devrait te générer les colonnes automatiquement.

    Une fois des informations saisies dans le dgv, tu devrais pouvoir les récupérer en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Conseiller> lst = (List<Conseiller>)bindingSource1.DataSource;
    Bon code !

  5. #5
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    Merci Jaco67,
    je ne comprend toujours pas grand chose, je ne souhaite pas que tu ecrive mon code pour moi. mais que tu me donnes aumoin des exemples qui me permetrons de comprendre ce que je dois faire pour resoudre mon problèmes.
    Merci.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    A quel endroit bloques-tu exactement ?
    La création de la classe ?
    La configuration du BindingSource ?
    La configuration du DataGridView ?
    La récupération des informations pour paramétrer la requête ?

    En recherchant "bindingsource datagridview c#" sur google tu trouveras sûrement de nombreux exemples !

  7. #7
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    Jaco67,
    comme je t'ai dit, je suis un noviste et j'aimerais savoir deja savoir pourquoi creer une classe.
    ensuite j'ai jamais utilisé et configuré de BindingSource pour un DataGridView.
    pour la requette parametré, y'a pas de soucis.
    pour me permettre d'avancé petit à petit, je n'arrive pas à comprendre pourquoi je recoit une erreur à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DtgConseiller.Rows[i].Cells[0].Value.ToString() == "True"
    lorsque la colonne prénoms de mon datagrid est vide ou null.
    Merci une fois de plus.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Par défaut
    Bonsoir
    Je pense que ton erreur vien que tu ne teste pas le cas d'un null.

    Null => absence de donnée

    Quand tu utilise une méthode, par exemple .ToString() qui converti en type String ta donnée: imagine que ta donnée est un chiffre et que ta méthode fait une division du style résultat = 1 / taDonnée si taDonnée est null donc comment veux-tu que la fonctionne te retourne un résultat ?

    Pour éviter ceci tu peux faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if (DtgConseiller.Rows[i].Cells[0].Value != null){
    // Ton traitement avec
    DtgConseiller.Rows[i].Cells[0].Value.ToString() == "True"}
    Après le problème de mon code est que ce passe-t-il si DtgConseiller.Rows[i].Cells[0] est lui même null ? Tu aura aussi un erreur puisque tu essaye de prendre la valeur de la propriété de .Cells[0] qui est null et n'a donc pas de propriété. Connais tu la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string monText = condition ? CeQueJeFaitSiLaRéponseEstOui : CeQueJeFaitSiLaRéponseEstNon
    En fait ce que mon code fait c'est que ma variable monText prend la valeur CeQueJeFaitSiLaRéponseEstOui ou CeQueJeFaitSiLaRéponseEstNon Selon le respect de la condition, n'importe quelle condition i > 12, String.IsNullOrEmpty(i).
    Je fais parfois ceci pour vérifié des null et affecter ma valeur en conséquence.
    C'est pas du tout beau par contre.

    PS: Concernant ton code pour "Optimiser" tu devrais faire la déclaration et l'ouverture de ta connexion AVANT ta boucle for, ton traitement execute DANS la boule, et la fermeture APRES ta boucle for. Puisque la si tu as 1000000 enregistrement tu va faire exploser ton serveur de BDD .

    Pour moi ton code devrait plus ressembler a ceci:
    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
     
    string strinsertion="";
    SqlConnection oConnection = new SqlConnection(strConnexion);
    oConnection.Open();
     
              for (int i = 0; i < DtgConseiller.Rows.Count - 1; i++)
                {
                    try
                    {
    		    bool maValeurEstVrai = DtgConseiller.Rows[i] != null ? DtgConseiller.Rows[i].Cells[0] != null ? DtgConseiller.Rows[i].Cells[0].Value != null ? DtgConseiller.Rows[i].Cells[0].Value.ToString() == "True" ? true : false : false : false : false;
                        if (maValeurEstVrai)
                        {
                            strinsertion = " Insert into edition_conseiller values'" + (Environment.MachineName + "'," +
                                                                                    DtgConseiller.Rows[i].Cells[1].Value.ToString() + "," +
                                                                                    DtgConseiller.Rows[i].Cells[2].Value.ToString() + "," +
                                                                                    DtgConseiller.Rows[i].Cells[3].Value.ToString() + "," +
                                                                                    CodeIntermediaire + ", '1','1'");
     
                            SqlCommand oCommand = new SqlCommand(strinsertion, oConnection);
     
                            oCommand.ExecuteNonQuery();
     
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(" l erreur suivante c'est produite :" + ex.Message);
                        oConnection.Close();
                    }
                }
    oConnection.Close();
    De plus j'ai mis le oConnection.Close(); de ton catch puisqu'en cas d'erreur tu ne ferme j'amais ta connexion et ça c'est pas bien

  9. #9
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    Merci Haoshin,
    avec ton aide j'ai grandement évolué,
    tout se passe presque bien, sauf que lorsque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DtgConseiller.Rows[i].Cells[3].Value.ToString() + "," +
    est null cette condition n'est pas vérifié
    bool maValeurEstVrai = DtgConseiller.Rows[i] != null ? DtgConseiller.Rows[i].Cells[0] != null ? DtgConseiller.Rows[i].Cells[0].Value != null ? DtgConseiller.Rows[i].Cells[0].Value.ToString() == "True" ? true : false : false : false : false;
    l
    et de se fait l'insertion n'a pas lieu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     if (maValeurEstVrai)
                        {
                            strinsertion = " Insert into edition_conseiller values'" + (Environment.MachineName + "'," +
                                                                                    DtgConseiller.Rows[i].Cells[1].Value.ToString() + "," +
                                                                                    DtgConseiller.Rows[i].Cells[2].Value.ToString() + "," +
                                                                                    DtgConseiller.Rows[i].Cells[3].Value.ToString() + "," +
                                                                                    CodeIntermediaire + ", '1','1'");
     
                            SqlCommand oCommand = new SqlCommand(strinsertion, oConnection);
                            oConnection.Open();
                            oCommand.ExecuteNonQuery();
                            oConnection.Close();
     
                        }
    n'a pas lieu portant elle devrait.
    je recherche aussi l'equivalent de la fonction isnull (variable, valeur de remplacement) qui se fait en transact sql en c#.
    Merci une fois de plus de ton soutient.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Par défaut
    Bonjour,
    Tant mieux je pense que ton insertion ne marche pas pour un problème équivalent. En fait quand tu dev un null non géré leve une erreur c'est pour cela qu'il faut gérer tous les nulls. Mon code précédent si tu le modifie un peu comme ceci:
    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
     
    if (maValeurEstVrai)
                        {
    string cell1 = DtgConseiller.Rows[i].Cells[1].Value != null ? DtgConseiller.Rows[i].Cells[1].Value.ToString() : String.Empty;
     
    string cell2 = DtgConseiller.Rows[i].Cells[2].Value != null ? DtgConseiller.Rows[i].Cells[2].Value.ToString() : String.Empty;
    string cell3 = DtgConseiller.Rows[i].Cells[3].Value != null ? DtgConseiller.Rows[i].Cells[3].Value.ToString() : String.Empty;
     
                            strinsertion = " Insert into edition_conseiller values'" + (Environment.MachineName + "'," +
                                                                                 cell1 + "," +
                                                                                 cell2    + "," +
                                                                                 cell3 + "," +
                                                                                    CodeIntermediaire + ", '1','1'");
     
                            SqlCommand oCommand = new SqlCommand(strinsertion, oConnection);
                            oConnection.Open();
                            oCommand.ExecuteNonQuery();
                            oConnection.Close();
     
                        }
    En somme je vérifie d'avoir une valeur non null pour la convertir en string sinon j'affecte une valeur vide, qui est différent de null. Si je devais parler en chiffre un vide ca correspond a 0, un null c'est un manque d'information.
    Si tu as d'autres questions hésite pas

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/01/2009, 18h31
  2. Réponses: 5
    Dernier message: 10/05/2006, 15h47
  3. [C#][ADO.NET][2.0] Comment inserer des enregistrement ....
    Par doccpu dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/03/2006, 14h39
  4. Réponses: 5
    Dernier message: 22/12/2003, 14h18
  5. [IB v7.1][C#][ADO.NET] Démarrer avec IB 71
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 14
    Dernier message: 05/08/2003, 12h25

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