Problème d'accès avec 2 thread à une base de donnée SQL

themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 - 6 sept. 2005 à 17:35
cs_dofdof Messages postés 15 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 19 septembre 2005 - 7 sept. 2005 à 13:18
Salut a tous!
Mon problème est le suivant:
J'ai une application c++ .Net qui fait appelle a une DLL de la solution afin de se connecter a une base de donnée SQL Server 2000.
J'ai ensuite un premier thread qui créé un objet, qui va donc utiliser cette DLL pour se connecter à la base. Puis, un 2e thread créé un autre objet (de mme classe), qui donc va egalement se connecter a la base, avec un login different.
Le pbl, c'est que lorsque le deuxieme essaie de se connecter, j'ai un "Bug assertion Failed", et j'obtiens le message SQL suivant:
"SQL: Une opÚration OLE-DB en plusieurs Útapes a gÚnÚrÚ des erreurs. VÚrifiez chaque valeur d'Útat OLE-DB disponible. Aucun travail n'a ÚtÚ effectuÚ. - Une opÚration OLE-DB en plusieurs Útapes a gÚnÚrÚ des erreurs. VÚrifiez chaque valeur d'Útat OLE-DB disponible. Aucun travail n'a ÚtÚ effectuÚ. - Provider=SQLOLEDB.1;SERVER=INSTANCE\BASE;OLE DB Services=-2;User ID='Login';Password='Pass';Data Source=INSTANCE\BASE;Initial catalog=MABASE;Persist Security Info=True;Time Out=600."

L'erreur arrive sur l'utilisation de la fonction: "OpenFromInitializationString"

Qqu'un a-t-il une idée SVP?

1 réponse

cs_dofdof Messages postés 15 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 19 septembre 2005
7 sept. 2005 à 13:18
Salut,
Le probléme vient du fait que les deux threads essai d'acceder aux memes données en meme temps.
Soit tu crée une file d'attente qui te permet de lancer le deuxieme thread quand le premier est finit, soit il faut creer une zone critique mais la je suis pas sur cherche la methode "Critical section"
ou tu utilise des mutex mais je sais pas comment les implementer en C++

(les mutex permettent de proteger les données afin d'eviter que deux threads modifie la meme donnée en meme temps.

@+
0
Rejoignez-nous