Rapidité pour réponse à requète SQL via ADO .net [Résolu]

Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
- - Dernière réponse : cs_labout
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
- 17 déc. 2004 à 15:09
Bonjour à tous,

j'ai une petite question sur la rapidité des réponses sur requète ADO.

Je fais une petite applie (sous XP) en VB.net avec un serveur SQL(MS SQL Server) en locale sur la machine.

Ma question est la suivante, vaut-il mieux (sur une table de 1500 enregistrements) :

1) faire 1 requtête (SELECT FROM NomTable Where Colonne = Valeur avec Valeur en clée primaire) qui retourne une seule ligne à traitée. Faire ceci 16 fois (donc 16 connexions, 16 Dataset à remplir...).

OU

2) faire une requête (SELECT * FROM NomTable) qui retourne toute la table et faire mon traitement en VB (donc une seule connexion, mais un gros rapatriement de la table).

??????????

Le fond de ma question est le suivant : comment faire pour avoir la méthode la plus rapide pour la gestion des réponses à mes requête.

--------------------------------------------------
Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Afficher la suite 

19 réponses

Meilleure réponse
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
3
Merci
labout

Voilà comment je ferai

dsProducts as new DataSet
dim strConnection As String = "Server=localhost;" & _
"DataBase=Northwind;" & _
"Integrated Security=SSPI"

Dim northwindConnection As New SqlConnection(strConnection)

' Le SqlDataAdapter est utilisé pour remplir le DataSet
Dim ProductAdapter As New SqlDataAdapter( _
"SELECT ProductName,Price FROM products",northwindConnection)
ProductAdapter.Fill(dsProducts, PRODUCT_TABLE_NAME)
ProductAdapter.Fill(dsProducts,"Products")

dvProducts = new dataView(dsProducts.Tables("products"),_
"ProductName like '%'",= "ProductName ASC", _
DataViewRowState.OriginalRows)

ensuite si filtre sur "A"

dim strfilter as string
strFilter = "ProductName like A%"
dvProducts.RowFilter=strFilter

ensuite

For i = 0 To dvProducts.Count ' le nb de records
' le premier champ de la ligne i
MsgBox(dvProducts.Item(i).Item(0))
' le deuxième champ de la ligne i
MsgBox(dvProducts.Item(i).Item(1))
' le nom du premier champ
MsgBox(dvProducts.Item(i).DataView.Table.Columns(0).ToString)
' le type du champ
msgbox dvProducts.Item(i).DataView.Table.Columns(0).datatype.name
Next

@+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 110 internautes nous ont dit merci ce mois-ci

Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout

Je pencherai sans hésiter pour la deuxième solution surtout si la tqble ne fait que 1500 enreg.

Dans la première solution il y aura 16 dateset mais sur la même connection.
@+
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Merci labout,

mais je ne peux pas faire de requête alors,
moi il faut que je mette à jour une ligne bien précise.
Je doit faire un "SELECT" sur un dataset, c'est possible ?

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
labout,

je crois que g trouvé encore mieux.
Faire une requète pour rapatrier dans un dataset les 16 lignes qui m'interressent.
Faire mes traitement dans le dataset, puis remetrre à jour dans la bd.

ça en vaut vraiment, le coup car ça va me faire modifier sacrément mon code :(

si tu as des idées, n'hésite pas.

PS : j'avais déjà fait des recherche sur sql et j'avais déjà remarque que tu répondais souvent. Quelle surprise quand j'ai vu que tu me répondais ;)
Au nom de tous, merci pour le partage de la connaissance ;)

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout

Je réponds en ce moment car je suis en attente d'une mission
venant d'en terminer une.
@+
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
labout,

merci pour ta réponse si rapide, je vais étudier ça aujourd'hui.
Je te tient au courant.

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Bonne nouvelle !

j'ai trouvé une methode relativement simple sur un système de requête.

Avec la méthode Select() d'un datatable je peux sélectionner la ligne qui m'interresse et y mettre à jour la cellule de mon choix.

C'est hypra rapide !

Cette soluce est inspirée de ton explication, merci pour ton aide labout !!

Sans doute à bientôt mon projet n'est pas fini ;)

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Labout,

j'ai encore une petite question :

comment fais-tu la mise à jour de ta base de données avec ton dataview ?

Je suis coincé.

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout

Pour datagrid avec maj, je passe par un oleadapter que je dépose dans ma feuille
il me crée les comamndes

OleDbDataAdapter1.Update(dsproduct, "matable")
@+
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
lol

merci pour ta réponse si rapide, c'est exactement ce que je viens de trouver ;)

Merci pour ton aide !

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Heu..... encore une tite question ;)

Je veux utiliser l'aggrégat Max avec RowFilter pour trouver la valeur maximale d'une colonne.

tu sais quelle est la syntaxe ?

J'ai essayé ....RowFilter("Max(nom_colonne)") mais ça ne marche pas :)

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout

c'est dans l'alimentation de la grille
qu'il faut mettre le filtre dans la requete

SELECT max(Price) FROM products
ou
SELECT max(UnitPrice) FROM products group by ProductName,unitprice order by UnitPrice desc

puis réalimenter la grille
@+
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Mais avec cette méthode, je suis obligé d'alimenter à nouveu un dataset.

Avec RowFilter, je dois normalement pouvoir utiliser Max, mais g toujours une erreur, je n'arrive pas à trouver la synthaxe.

Par exemple, pour chercher la ligne dont la colonne "MaColonne" est égale à "1", je fais :

dvProducts.RowFilter="ProductName = '1'"

et pour avoir la valeur max de cette même colonne je voudrais un truc du tyle :

dvProducts.RowFilter="Max(ProductName )"

mais la synthaxe n'est pas bonne :(

C'est ou que ça cloche ?

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
J'ai trouvé la synthaxe :

dvProducts.RowFilter="ProductName = Max(ProductName)"

par contre je suis déçu car le temps de réponse est carrément long ! (2 secondes pour 2500 enregistrement).

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout

mets donc une cle d'index sur le champ clé et tu verras la différence de 1 à 100
mais je ne comprends pas max(productname) c'ela donne le produit dont le nom est le plus long ???

@+
Messages postés
25
Date d'inscription
lundi 22 décembre 2003
Statut
Membre
Dernière intervention
8 octobre 2010
0
Merci
Euh.... comment on fait pour mettre un index sur le dataview ?

Le Max me donne la valeur la plus grande de la colonne productname

Merci de partager le savoir.
Il n'y a pas de vol, juste de l'échange.
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout

Non pas dans le dataview

Dans SqlServer
Ouvre la table en modification
clic droit Index puis Nouveu enfin sélectionner le champ.
fermer et enregistrer
J'ai vérifié 2700 enreg 15 secondes

Dans Access c'est un peu la même chose
@+
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
4
0
Merci
labout
4928 enreg 11 secondes
@+