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 :

c# et sqlreader


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut c# et sqlreader
    Bonjour,

    Je travail sur un projet winform en C# , j'utilise aussi les base de données.
    A ce stade, je rencontre un petit problème dont je n'est pas la solution.

    Je veux remplir une datagridview en utilisant les base de données.

    Voici les données (simplifiées):

    2 colonnes : 1 - Numéro / 2 - Nom

    les deux valeurs sont récupérer dans 2 table différentes. j'utiliser dans un premier temps un SQLREADER pour remplir la première colonne puis un 2 eme qui parcours la grille et qui, selon le numéro , va chercher le nom qui correspond au numéro. Jusque là, facile.

    Le problème c'est que tout les numéro ne sont pas associé a des noms dans ce cas : case blanche , pas de problème. Mais il me fait une erreur
    Tentative non valide de lecture de données lorsqu'aucune données n'est présente
    et arrête le traitement des lignes suivantes.

    Comment faire comprendre a ce prog que c'est pas grave et qu'il faut continuer à traiter ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par siro1 Voir le message
    Comment faire comprendre a ce prog que c'est pas grave et qu'il faut continuer à traiter ?
    Essaie de vérifier que la donnée que tu essaie est présente ( différent de null) avant d'essayer de la lire.

    Je pense que ton SqlDataReader possède une proprieté IsDBNull

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    J'ai la même erreur, voici mon bout de code :
    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
     
                for (int i = 0; i < icount; i++)
                {
                    try
                    {
     
                        cmd.Connection = cnx;
                        cmd.CommandText = "SELECT nomPers FROM PERSONNEL WHERE numCarte='" + this.dataGridView1.Rows[i].Cells[4].Value.ToString() + "'";
     
                        SqlDataReader reader = cmd.ExecuteReader();;
                        reader.Read();
                        if (!reader.IsDBNull(0))
                        {
                            String nom = reader.GetString(0);
                            this.dataGridView1.Rows[i].Cells[3].Value = nom;
                        }
                        else
                        {
                            this.dataGridView1.Rows[i].Cells[3].Value = "Non enregistrée";
                        }
     
                        reader.Close();	Smileys
     
                    }
                    catch (Exception err)
                    {MessageBox.Show(err.ToString()); }
                }
    mon code est il correcte ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Peut-être que ta requête ne renvoi rien. Il faut ajouter un if:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (reader.Read())
    {
    	if (!reader.IsDBNull(0))
    	{
    		String nom = reader.GetString(0);
    		this.dataGridView1.Rows[i].Cells[3].Value = nom;
    	}
    	else
    	{
    		this.dataGridView1.Rows[i].Cells[3].Value = "Non enregistrée";
    	}
    }

  5. #5
    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
    Pourquoi procéder ainsi? avec une seule requête avec jointure tu récupère tous les données donc tu a besoin.

    @++
    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

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    PatteDePoule ce que tu m'as proposé marche très bien, peut tu m 'expliquer , pourquoi on ajoute un if ?

    Merci a tous les autres aussi pour vos réponses !

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    La fonction Read() essait de lire un enregistrement. Mais c'est possible qu'il n'y en ai pas, alors elle renvoi FALSE, sinon elle renvoi TRUE.

    C'est le même principe pour parcourir tout les enregistrements d'une requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (reader.Read())
    {
    ...
    }

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

Discussions similaires

  1. valuemember et sqlreader
    Par sispeo78 dans le forum Services Web
    Réponses: 0
    Dernier message: 23/06/2014, 20h49

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