[VS2010] [C#] Parcourir résultat requête SQL

Résolu
sprpxl13
Messages postés
4
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
5 janvier 2017
- 5 avril 2011 à 08:56
sprpxl13
Messages postés
4
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
5 janvier 2017
- 5 avril 2011 à 11:29
Bonjour à tous,

J'expose mon problème.
Je suis entrain de réaliser une application en C# qui permet de se connecter à une base de données et exécuter une requête SQL stocké.

Le problème que j'ai, c'est pour récupérer le résultat de cette requête dans des variables.

Sous DOS, le résultat de ma requête est formaté comme tel :
Nom : xxxxx
Prénom : xxxxx
Adresse : xxxxxxxxxxxxxx
...



Voici mon bout de code correspondant :

private void button1_Click(object sender, EventArgs e)
        {
            
            String requete_generer = "SELECT ... FROM ...";
            if (OConnexion !null && OConnexion.State ConnectionState.Open)
            {
                OracleCommand cmd = new OracleCommand(requete_generer, OConnexion);
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = requete_generer;
                String resultatString = Convert.ToString(cmd.ExecuteScalar());

            }
        }


Voilà, donc si quelqu'un peut me donner la main pour m'expliquer comment parcourir ce résultat de requête ligne par ligne et stocker dans des variables uniquement les données qui m'intéresse (en outre les "xxxxx"), ce serait magnifique.

Merci d'avance à tous ceux qui passeront sur ce sujet.

2 réponses

krimog
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
14 février 2015
51
5 avril 2011 à 10:46
Salut

La méthode ExecuteScalar() ne renvoie que le premier champ de la première ligne renvoyée par la requête.

Tu dois utiliser la méthode ExecuteReader(). Celle-ci te renvoie un objet de type SqlDataReader (ou en l'occurrence, probablement OracleDataReader). Depuis cet objet, tu appelles la méthode Read() qui passe à la ligne suivante dans le résultat de ta requête. Read() renvoie true s'il reste des lignes, false sinon.

Une fois que tu as fais Read(), tu peux accéder aux champs directement avec monObjet["MonChamp"].ToString() ou monObjet[0].ToString() pour accéder au premier champ.

OracleDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
    // Tu fais ce que tu veux avec Reader["NomDuChamp"]
    // ou reader[indiceDuChamp]
}


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
1
sprpxl13
Messages postés
4
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
5 janvier 2017

5 avril 2011 à 11:29
Merci beaucoup krimog,

Effectivement l'ExecuteReader fonctionne mieux dans mon cas que l'ExecuteScalar ;). Je viens de tester, ça fonctionne parfaitement.

Encore merci, on peut clore le thread.
0