OVH Cloud OVH Cloud

Pourquoi SqlCommandBuilder génère des requêtes UDPATE complexes...

1 réponse
Avatar
Gilles TOURREAU
Salut tout le monde !

Voilà, j'utilise un SqlCommandBuilder pour généré automatiquement les
requêtes nécessaire pour un Update() sur une DataTable...

Tout fonctionne normalement, mais le problème vient quand je suis sur
une table avec beaucoup de données (1 millions d'enregistrement a peu
près...)

Il faut attendre 10 secondes pour qu'un Update() puisse faire une
modification sur une seul colonne et pour un enregistrement...

En jettant un coup d'oeil dans le Profiler j'obtient une requête du
style :

UPDATE MaTable SET MaChampModifié = ValeurModifié WHERE Identifiant =
ValeurIdentifiant AND Colonne1 = ValeurColonne1 AND ... AND ColonneN =
ValeurColonneN

Pourquoi une telle requête est généré au niveau du WHERE alors qu'un
simple : Identifiant = ValeurIdentifiant suffirait...

En vous remerciant par avance de vos lumières !

--
Gilles TOURREAU
Responsable informatique
gilles.tourreau@pos.fr

Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

1 réponse

Avatar
Ambassadeur Kosh
> Il faut attendre 10 secondes pour qu'un Update() puisse faire une
modification sur une seul colonne et pour un enregistrement...
En jettant un coup d'oeil dans le Profiler j'obtient une requête du style
:
UPDATE MaTable SET MaChampModifié = ValeurModifié WHERE Identifiant =
ValeurIdentifiant AND Colonne1 = ValeurColonne1 AND ... AND ColonneN =
ValeurColonneN

Pourquoi une telle requête est généré au niveau du WHERE alors qu'un
simple : Identifiant = ValeurIdentifiant suffirait...



vu que l'identifiant fait partie du where, si il est clé primaire, ça trouve
la ligne instantanément dans la base. donc, les 10 secondes, ça vient pas de
ça.
par contre, si il est pas indexé, faut pas s'étonner.

maintenant, l'ensemble du where permet de detecter l'effet des actions
d'autres utilisateurs. pour imager, vu que vous decidez des nouvelles
valeurs à partir des anciennes, si elles ont bougé entre temps, il est juste
de vous en informer afin que vous decidiez de ce qui doit etre fait. écraser
les modifs de l'autre, ou refabriquer vos données en tenant compte des
nouvelles valeurs. c'est ce qu'on appelle une transaction "optimiste". les
DbTransaction ne vous seront d'aucun secours ici, puisque vous etes en mode
deconnecté. ce qui explique cela.

En vous remerciant par avance de vos lumières !



j'espere que ça va vous aider un peu.