Question SQL

Question SQL - C#/.NET managed - Programmation

Marsh Posté le 20-01-2008 à 00:01:06    

SITUATION: Tu as une table (e.g. activités) et tu veux extraire tous les enregistrements de celle-ci qui appartiennent à un utilisateur.
 
La logique conventionnelle serait de faire une requête du genre: SELECT * FROM activities WHERE u_uid=$user_uid;
Par la suite tu obtiens un RecordSet et effectuera une boucle pour extraire chaque ligne (row) jusqu'à ce que la fin de données soit obtenues.  
 
PROBLEM: On m'a dit qu'il y avait une autre façon de faire, qui permettra d'obtenir plus d'une ligne (row) à la fois et ainsi contournée le besoin d'utiliser une boucle.
 
QUESTIONS: La solution recherchée pourrait s'appliquer soit en PHP ou en C# (contexte: MySQL ou MSSQL). Est-ce que quelqu'un a soit un exemple de code à partager, le nom ou la démarche logique à suivre pour obtenir le résultat souhaité. Alternativement, si vous pensez que c'est impossible vous pouvez donner la raison qui vous amène à cette conclusion.
 
Merci pour votre aide.


Message édité par cfrankb le 20-01-2008 à 00:02:05
Reply

Marsh Posté le 20-01-2008 à 00:01:06   

Reply

Marsh Posté le 20-01-2008 à 15:45:06    

en C# tu as deux techniques, la première en utilisant des readears (mode connecté avec une boucle) et un autre mode qui est le mode déconnecté (via les Adapter).
 
Tu trouveras les informations dans la MSDN en chargeant les OleDbAdapter, SqlAdapter, OracleAdapater, etc...
 
Grâce à ceux ci tu peux charger directement toutes les lignes dans un dataset sans devoir boucler dessus.

Reply

Marsh Posté le 21-01-2008 à 10:31:21    

(à noter qu'avec un recordset ces solutions sont vraies aussi... le problème vient juste du filtre sur id=$user_id : ça ne ramène qu'une ligne, là où on en veut plusieurs)
 
après, quelle que soit la méthode retenue, il suffit de boucler sur l'objet obtenu (dataadapter, datareader, recordset, etc.) plutôt que de refaire X requêtes


Message édité par MagicBuzz le 21-01-2008 à 10:32:11
Reply

Marsh Posté le 22-01-2008 à 21:16:21    

Merci pour vos réponses. Je cherche spécifiquement une solution qui n'utilise pas de boucle parce c'est ainsi que la question d'entrevu était posée. Je vais examiné la documentation au sujet des Adapters en C# sur MSDN. Si quelqu'un avait un petit bout de code qui illustre comment c'est fait, j'apprécierais grandement parce que j'apprend plus vite avec des exemples concrets.

Reply

Marsh Posté le 23-01-2008 à 13:34:06    

cfrankb a écrit :

Merci pour vos réponses. Je cherche spécifiquement une solution qui n'utilise pas de boucle parce c'est ainsi que la question d'entrevu était posée. Je vais examiné la documentation au sujet des Adapters en C# sur MSDN. Si quelqu'un avait un petit bout de code qui illustre comment c'est fait, j'apprécierais grandement parce que j'apprend plus vite avec des exemples concrets.


 
 

Code :
  1. SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter("select * from customers", oConnection);
  2. DataSet oDataSet = new DataSet("Customers" );
  3. oSqlDataAdapter.Fill(oDataSet,"Customers" );


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 23-01-2008 à 13:53:23    

Merci ixemul ! :)

Reply

Marsh Posté le 23-01-2008 à 15:12:00    

ouais enfin ça te dispense pas d'une boucle pour parcourir ton dataset ensuite hein...
 
toutes les solutions citées plus haut font rigoureusement la même chose...

Reply

Marsh Posté le 23-01-2008 à 15:14:46    

MagicBuzz a écrit :

ouais enfin ça te dispense pas d'une boucle pour parcourir ton dataset ensuite hein...
 
toutes les solutions citées plus haut font rigoureusement la même chose...


 
 
ça dépends si tu veux binder direct sur un contrôle  :whistle:


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 23-01-2008 à 15:28:15    

ouais effectivement, mais le bind de toute façon il fait une boucle quand même, même si tu la vois pas :o ;)

Message cité 1 fois
Message édité par MagicBuzz le 23-01-2008 à 15:28:28
Reply

Marsh Posté le 23-01-2008 à 15:38:17    

MagicBuzz a écrit :

ouais effectivement, mais le bind de toute façon il fait une boucle quand même, même si tu la vois pas :o ;)


 
 
Ouais, mais merci, j'en ai un peu trop vu la ou je suis avec des types qui parse un dataset pour remplir une collection, puis ensuite parse cette collection pour construire un datatable et le binder ensuite sur un contrôle... Sur un projet au forfait en plus...
 
resultat je le refait de 0 depuis septembre...
 
Ya des gens, faudrait leur interdire de toucher un compilo :/


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
Reply

Marsh Posté le 23-01-2008 à 15:38:17   

Reply

Marsh Posté le 23-01-2008 à 15:54:08    

:lol:
 
effectivement, c'est un peu tout naze comme truc ^^
 
m'enfin le pire que j'ai vu, c'est des gens qui font une requête :
 
select id from matable;
 
parcourent le résultat, et pour chaque ligne :
 
select meschamps from matable where id = @id
 
puis copie meschamps dans un objet
 
qui sert ensuite à allimenter un listview par exemple :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed