2015-04-29 1 views
1

J'utilise UniDac et j'effectue une instruction Update sur le serveur MySQL. Je le fais simultanément par deux clients. Je voulais savoir qui avait mis à jour l'enregistrement en premier lieu, donc je vérifiais le paramètre RowsAffected et je pensais que si un pair le faisait avant le second, j'obtiendrais RowsAffected> 0 seulement sur le premier pair. Le problème est que je reçois RowsAffected> 0 sur les deux clients. Comment omettre ce problème?Le paramètre RowsAffected n'est pas fiable. Pourquoi?

+0

Ce que vous fait penser le deuxième poste ne serait pas en mesure de mettre à jour les mêmes dossiers? À quoi ressemblent vos requêtes SQL? La mise à jour du premier pair modifie-t-elle les valeurs recherchées par la deuxième requête? –

+0

'RowsAffected' provient uniquement d'un client correctement évalué qui a effectué une mise à jour ou une insertion. Seulement après que ces commandes peuvent avec 'RowsAffected' vérifié combien de" lignes "ont été affectées par cette commande. Le client 2 est responsable de ses changements dans la base de données elle-même, et ne voit donc que les modifications apportées. client2 ne peut jamais voir avec 'RowsAffected' ce que client1 a fait. Si 'RowsAffected> 0' client2 doit également apporter des modifications à la base de données. –

+0

'RowsAffected' est parfaitement fiable. Votre compréhension de ce qu'il fait est imparfaite. Tout ce que vous ne comprenez pas n'est pas un bug ou n'est pas fiable ou cassé; cela signifie simplement que vous ne comprenez pas ce qu'il fait, à quoi il sert ou comment l'utiliser. –

Répondre

0

https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count ... La valeur ROW_COUNT() est similaire à la valeur des mysql_affected_rows() ...

+0

J'ai déjà testé cette fonction et il se comporte toujours comme rows_matched. Existe-t-il un autre moyen d'examiner quel pair a effectué un changement? La nouvelle valeur dans les deux connexions sera la même, mais j'ai besoin de savoir qui a fait le changement en premier. – Flash

+0

RowsAffecté dans les composants DevArt est fiable: il renvoie le nombre de lignes modifiées, supprimées ou insérées par LAST STATEMENT s'il s'agissait d'une commande UPDATE, DELETE ou INSERT. https://dev.mysql.com/doc/refman/5.0/fr/mysql-affected-rows.html – Developer

+0

http://forums.devart.com/viewtopic.php?t=340 il est dit qu'il ne compare pas si les données ont été modifiées. J'ai la même observation et j'ai la dernière version d'UniDac. RowsAffected renvoie 1 TOUJOURS si l'ancienne valeur était la même que la nouvelle. – Flash