Base de données + problème

cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 27 févr. 2006 à 17:25
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 28 févr. 2006 à 11:46
Bonjour à tous,

J'ai une base de donnée, je recupère dans un premier temps des paramètres de la base puis je me sers de ces paramètres pour faire un traitement dans la base. Le problème est que entre le temps ou je recupere ces paramètres et le temps ou j'en fais un traitement il y a un temps infime mais un temps ou les paramètres que j'ai récupéré on peut être changer et ca risque de poser des problèmes, puisque je fais un traitement sur des paramètres qui n'existe plus.

Qu'en pensez vous ?

Par avance, merci.

5 réponses

boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
27 févr. 2006 à 18:35
tu peux utiliser deux thread par exemple, le premier utilise une connexion pour recuperer les parametres, le deuxieme utilise une deuxieme connexion pour faire les traitements, et c'est à toi de trouver une solution pour les synchroniser
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
28 févr. 2006 à 08:10
Salut, ça s'appelle "les acces concurrents".


plusieurs possibilités :


1 ) les transactions ( SQLTransaction etc.. ) qui permettent "en gros" de faire plusieurs opérations à la suite ou aucune si une seule échoue ( mais là c'est pas vraiment ton cas ).


2 ) y'a une solution assez simple, qui permet de ne pas modifier les données si elles ont été modifiées depuis la dernière lecture.


Par exemple si Price vaut 2 au moment de la lecture et bien cette commande échoue si le prix à été modifié depuis la dernière lecture. On peut utiliser des variables compteurs aussi, suffit de tester si le compteur à été incrémenté depuis le dernier accès.


UPDATE Products SET Price 3 WHERE ProductName 'Milkyway' AND Price = 2
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
28 févr. 2006 à 10:01
Ben en faite par exemple je veux faire un calcul dont je fais une requete sql sur la base pour récupérer un nombre, le nombre rentre dans une variable, puis je fais une deuxieme requete pour recuperer un autre nombre de nombre rentre dans une variable. Entre le temps ou j'ai récupérer mon premier nombre et mon deuxieme, il c'est peut être passé un temps durant lequel mon premier nombre à changer, donc l'addition des deux sera fausse. Je sais quand qq accède a une base l'acces est bloqué pour les autre utilisateurs est ce que une solution n'est pas de bloqué l'acces durand tout le traitement du moins si c'est possible. Mon exemple est un cas d'école je précise.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
28 févr. 2006 à 11:27
La méthode DbConnection.BeginTransaction prend un paramètre IsolationLevel qui permet de bloquer les accès concurrents mais je ne sais pas si c'est la meilleure solution..

C'est un cours sur SQL mais qui explique bien les transactions :

http://sqlpro.developpez.com/cours/sqlaz/techniques/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
28 févr. 2006 à 11:46
Pour toi quel est la meilleur solution ?
0
Rejoignez-nous