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 :

Probléme de recupération de données avec la base de données


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Probléme de recupération de données avec la base de données
    Bonjour a tous,

    Alors voila mon problème, j'ai créé un logiciel en c# avec visual studio qui exploite une base de données. Le but est de savoir avec quoi est équipé un bureau et où il se situe.
    Mon problème se pose lorsque je souhaite récupérer le plus grand ID_poste qui est la clef primaire de la table et qui est aussi en auto incrémentation.
    Je pense que cette explication devrait suffire pour comprendre le bout de code qui ne fonctionne pas.
    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
    SqlConnection myConnection;
                SqlCommand myCommand;
                string myConnectionString;        
     
                myConnectionString = "user id=sa;password=password69;initial catalog=Config_bureau;data source=JO-PC\\SQLEXPRESSMAJ;Connect Timeout=10;"; // chaine de connection a la bdd
     
                string strRequete = "SELECT MAX (ID_poste) AS max FROM dbo.Poste;"; // la fameuse requete
                int id_poste = 0;            
                try
                {
                    myConnection = new SqlConnection(myConnectionString);
                    myConnection.Open();
                    myCommand = new SqlCommand(strRequete, myConnection);
                    SqlDataReader mySqDataReader = myCommand.ExecuteReader();
                    {
                        if (mySqDataReader["ID_poste"] != System.DBNull.Value)
                        {
                            id_poste = (Int32)mySqDataReader["ID_Poste"];
                        }
                    }
                    myConnection.Close();
                }
                finally
                {
                    tb_ajout_peri_ID_poste.Text = Convert.ToString(id_poste);
                    // cette partie sert a ce que la text box soit pré-rempli
                }
    PS: le message d'erreur est le suivant:
    L'exception IndexOutOfRangeExecption n'a pas été gérer. Il pointe sur la condition if (mySqDataReader["ID_poste"] != System.DBNull.Value).
    Or je ne vois pas pourquoi je devrais récupérer avec une liste ou un tableau cette info. (j'ai déjà essayé la requête sur ma base de données et elle fonctionne)

    Merci pour le temps passé à lire ce message

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Cette erreur signifie :

    Une exception IndexOutOfRangeException est levée lors d'une tentative d'accès à un élément d'un tableau ou d'une collection ayant un index en dehors des limites du tableau ou inférieur à zéro.

    Source MSDN
    Tu peut avant le Finally mettre un Catch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      catch (Exception ex)
                {
                    MessageBox.show(ex.Message);
     
                }
    Ps : utilise la balise CODE

  3. #3
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Pour ton problème a mon avis, ça vient de ce que ton datareader ne contient pas la colonne ID_poste, mais mon petit doigt me dit que la colonne pourrait s'appeler max.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX (ID_poste) AS max FROM dbo.Poste;

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Il faut parcourir ton SQL Data Reader, en adaptant ton code comme ceci ça devrait aller mieux :


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SqlDataReader mySqDataReader = myCommand.ExecuteReader();
     
    while (mySqDataReader.Read())
    {
        if (mySqDataReader["ID_poste"] != System.DBNull.Value)
        {
            id_poste = (Int32)mySqDataReader["ID_Poste"];
        }
    }

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Matt07 Voir le message
    Il faut parcourir ton SQL Data Reader, en adaptant ton code comme ceci ça devrait aller mieux :


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SqlDataReader mySqDataReader = myCommand.ExecuteReader();
     
    while (mySqDataReader.Read())
    {
        if (mySqDataReader["ID_poste"] != System.DBNull.Value)
        {
            id_poste = (Int32)mySqDataReader["ID_Poste"];
        }
    }
    Toujours le même problème :s

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    @benny-blanco
    bien vue pour la balise code je n'y avais pas penser. Après avoir rajouter ton morceau de code il m'affiche ID_Poste puis 0. Ce champs de colonne existe bien pourtant.


    @Arthis
    Oui je sais, mon orthographe est pas top ...
    Non la colonne ne s'appelle pas max elle s'appelle ID_Poste.

    PS: pour le fonctionnement des forum ce n'est pas mon fort.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    J'ai essayer chez moi est ce code marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      protected void Page_Load(object sender, EventArgs e)
        {
           this.literalGenre.Text =  test().ToString();
        }
    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
     
     public int test()
        {
            string ChainedeConnexion = "Data Source=JEROME-PC\\SQLEXPRESS;Initial Catalog=myTunes;Integrated Security=True";
     
            SqlConnection myConnection;
            SqlCommand myCommand;
            string myConnectionString;
     
            myConnectionString = ChainedeConnexion;
     
            string strRequete = "SELECT MAX (idalbum) FROM album;"; // la fameuse requete
            int id_poste = 0;
            try
            {
                myConnection = new SqlConnection(myConnectionString);
                myConnection.Open();
                myCommand = new SqlCommand(strRequete, myConnection);
                SqlDataReader mySqDataReader = myCommand.ExecuteReader();
     
     
                while (mySqDataReader.Read())
                {
                    id_poste = mySqDataReader.GetInt32(0);
                }
     
                myConnection.Close();
                return id_poste;
            }
     
            catch (SqlException)
            {
                return 0;
                //this.literalGenre.Text = ex.Message;
            }
     
        }

  8. #8
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    je recommence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX (ID_poste) AS max FROM dbo.Poste;
    tu ecris "as max" cela signifie que la requete aura pour nom de colonne "max".

    donc ton datareader connaitra max comme nom de colonne a mon avis...

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par Arthis Voir le message
    je recommence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX (ID_poste) AS max FROM dbo.Poste;
    tu ecris "as max" cela signifie que la requete aura pour nom de colonne "max".

    donc ton datareader connaitra max comme nom de colonne a mon avis...
    Le " as MAX " ne pose aucun problème. Ce qui viens après le AS est interpréter comme un alias.

  10. #10
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Je m'enfonce dans mon explication donc j espere ne pas dire de betise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX (ID_poste) AS maxIdPoste FROM dbo.Poste;
    va donner :

    |maxIdPoste |
    -------------
    | 45645454 |


    ton datareader va pouvoir lire cette colonne si tu lui donnes le bon nom de colonne "maxIdPoste":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (mySqDataReader["maxIdPoste"] != System.DBNull.Value)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par benny-blanco Voir le message
    Le " as MAX " ne pose aucun problème. Ce qui viens après le AS est interpréter comme un alias.
    Merci pour ton avis Arthis, c'est effectivement sa. Il suffisait de remplacer ID_Poste par max.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (mySqDataReader["max"] != System.DBNull.Value)
                        {
                            id_poste = (Int32)mySqDataReader["max"];
                        }
    Merci a vous tous pour votre aide. =)

    Le problème est résolu.

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

Discussions similaires

  1. [PDO] Connexion avec la Base de Données avec PDO
    Par chipmunkette dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/05/2013, 19h58
  2. Réponses: 2
    Dernier message: 25/05/2011, 15h36
  3. Réponses: 4
    Dernier message: 05/10/2009, 12h19

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