begin process at 2012 02 10 09:54:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Base de données

 > 

ADO.NET

 > 

Violation d'acces concurrentiel sur adapterUpdate


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Violation d'acces concurrentiel sur adapterUpdate

lundi 12 novembre 2007 à 23:24:23 | Violation d'acces concurrentiel sur adapterUpdate

Kleidp

Bonsoir,

je vous expose mon problème:

Apres avoir ajouté une nouvelle ligne dans ma table grâce à un CurrencyManager, je fais un update grâce a un adapter.Update. Jusque là aucun soucis, la ligne se retrouve bien dans ma table access :

    cmClient = (CurrencyManager)BindingContext[dataSet21, "Client"];
    cmClient.AddNew();
    ...
    cmClient.EndCurrentEdit();
    adapterUpdate(dataSet21.Client)

Là ou ca se complique, c'est si je veux faire une modification de cette ligne tout de suite après (sans recharger l'appli) :
    cmClient.EndCurrentEdit();
    adapterClient.Update(dataSet21.Client);
    dataSet21.Client.AcceptChanges();

Il y a une "Violation d'accès concurrentiel ". arg..
Je récupère l'erreur avec un catch(DBConcurrencyException ex) et regarde la ligne qui tente d'être mise à jour (ex.Row) mais tout est normal, j'en suis certain (id a modifier, les valeurs des champs ...).
J'ai aussi tenté de suspendre la liaison (binding) du crrencyManager avant l'update, mais rien (Ce qu'on fait pas quant on est désespéré ...)
J'ai enlevé ma clef primaire, la relation de la table, toujours rien (alors là j'étais au bout :).

Si je recharge mon appli par contre tout fonctionne bien, alors en attendant, la solution que j'ai trouvé est de vider la table puis de la remplir dès que je fais un Update -_-

C'est une erreur qu'on retrouve sur les forums mais je n'ai vu aucune solution. Enfin il y a une première fois a tout ;)

Nb : j'ai le meme soucis avec le Delete forcément.


mardi 13 novembre 2007 à 02:01:34 | Re : Violation d'acces concurrentiel sur adapterUpdate

TheSaib

Administrateur CodeS-SourceS
Je n'y ai pas réfléchi mais je t'ai trouvé çà :

"If I understand everything correctly, here is a possible reason. You say you
insert new rows and then call Update.Does the database adjust any
autoincremented fields, or any other fields when it does the insert? If so,
then the problem is, that these changes do not get reflected in the DataSet.
So say you have a column A, that gets autoincremented. Initially, in your
DataSet it is null, when the row gets inserted into the database, the
database autoincrements it, and sets the new row's A value, to say 100. Your
DataSet still has a value of null.  You make some changes to the row and
call Update.  In the Update statement, it generates a WHERE clause, to make
sure it updates the right row. It is looking for A=null, but the database
has A=100 for that row. Thus, it has nothing to update.
If you do the Fill, then it gets updated in the DataSet to 100, you make
your modifications and Update again successfully, because now it is looking
for A=100, and it can find it."

::|The S@ib|::
MVP C#.NET
mardi 13 novembre 2007 à 10:44:24 | Re : Violation d'acces concurrentiel sur adapterUpdate

Kleidp

Merci,

En effet c'est bien possible puisque j'ai un champ autoIncrement. Je regarde ça ce soir.

mardi 13 novembre 2007 à 20:35:45 | Re : Violation d'acces concurrentiel sur adapterUpdate

Kleidp

Non ce n'est pas ça en fait.
L'id du dataSet et de la BDD sont bien les mêmes.
lundi 19 novembre 2007 à 13:53:17 | Re : Violation d'acces concurrentiel sur adapterUpdate

loicmichel

J'ai exactement le même problème.

Je cherche du coté de l'état courent du "Row".

Loic MICHEL
lundi 19 novembre 2007 à 14:02:30 | Re : Violation d'acces concurrentiel sur adapterUpdate

loicmichel

J'ai résolu le problème en ajoutant un "AcceptChanges()"  juste après le   currencyManager end édit.

Il faut aussi le faire

essaie :

<
cmClient = (CurrencyManager)BindingContext[dataSet21, "Client"];
    cmClient.AddNew();
    ...
    cmClient.EndCurrentEdit();
dataSet21.Client.AcceptChanges();

    adapterUpdate(dataSet21.Client)

  et


    cmClient.EndCurrentEdit();
        dataSet21.Client.AcceptChanges();
adapterClient.Update(dataSet21.Client);

>

Loic MICHEL
jeudi 27 décembre 2007 à 12:45:19 | Re : Violation d'acces concurrentiel sur adapterUpdate

lawid

Bonjour,
Es ce que réelement tu as resolu se probleme avec un Acceptchange()??
ce que je c si tu execute un acceptchange() avant un adapter.update(tableName)
tu n'auras rien a sauvegarder.
Revoie t'as solution et eclair moi

merci
jeudi 19 juin 2008 à 14:37:37 | Re : Violation d'acces concurrentiel sur adapterUpdate

fanatek

J'avais le même problème et en effet en ajoutant un AcceptChanges sur le DataSet ça a résolu mon exception.
Bizarre quand même car je débute et j'ai appris les manipulations des dataset depuis ce cours [ Lien ] dans lequel il ne parle pas de cet AcceptChanges();
Du coup son code :
// Update button was clicked
publicvoid btnUpdateClicked(object sender, EventArgs e)
{
// write changes back to DataBase
  daCustomers.Update(dsCustomers, tableName);
}

devient
// Update button was clicked
publicvoid btnUpdateClicked(object sender, EventArgs e)
{
// write changes back to DataBase
  dsCustomer.AcceptChanges();
  daCustomers.Update(dsCustomers, tableName);
}

En espérant que ça puisse aider.
mardi 24 juin 2008 à 10:04:00 | Re : Violation d'acces concurrentiel sur adapterUpdate

lawid

bonjour, es ce que t'as resolu le pb???
 voici sur koi je me suis basé pour le message que j'ai posté

MSDN

""Calling the AcceptChanges method or AcceptChanges method will commit all changes in the DataSet or DataTable. If either of these methods are called before the Update method is called, no changes will be committed when the Update method is called, unless further changes have been made since AcceptChanges or AcceptChanges was called.""

Essai de listé la liste des changement sur ton datatable avec la methode "getchange()"

bonne journé

mardi 24 juin 2008 à 10:08:48 | Re : Violation d'acces concurrentiel sur adapterUpdate

lawid

a propos n'oubly pas que la methode update return un "int", et si l' "adapter" ne recoie pas un message du moteur de la base de donné il generera une exception de violation d'acces

1 2

Cette discussion est classée dans : ligne, table, update, dataset21, cmclient


Répondre à ce message

Sujets en rapport avec ce message

ligne suivante et pré. d'une table ds une BDD Access [ par Blacknight91titi ] Bl@cknight91TitiBonjour,J'aimerai savoir s'il existe des méthodes pour récupérer la row suivante ou précédente par ra dataset [ par kooljy ] Bonjour,J'ai plusieurs problème au niveau du dataset.J'ai chargé une table de ma base de données dans un dataset.Je souhaite maintenant 3 choses :- Aj s'il vous plait de l'aide: update [ par creanova2000 ] bonjour,j'ai une connection SQL : myconnectionune data adapter : myadapterun dataset " ds1 qui comporte une table de nom client.la table client de ds1 sauvegarder les modifications appotrté a une table [ par koukou6311 ] bonjours je voudrai vous poser une question, j'ai créer une base de données sql sachant que le c# posséde une version intégré de sql "sql database "ma Update d'un DataGridView [ par jlf_2007 ] Bonjour,   J'ai un DataGridView de 6 colonnes par N lignes. Chaque ligne contient un nom de fichier et 5 résultats (une "string" et 4 "int"). Lorsque Copie d' objet Linq [ par jfcecile ] Bonjour je cherche à faire une copie d'une ligne d'un table, par le biais de linq,j'ai essayé d'implémenter la fonction clone dans la classe image de comment supprimer le derniere ligne de ma table ? [ par prodotnet ] comment supprimer le derniere ligne de ma table  sans savoir le nombre de ligne qu'on est ??merci bien de me repondre Update d'une table independante .dbf [ par martens ] Bonjour  a tous. voici mon probleme je voudrais faire la mise a jour d'un fichier dbf  visual foxpro avec ado.net .j'utilise le provider vfpoledb9 fou probleme update [ par benameur11 ] salut , j'ai un gros problème je n'arrive pas a mettre ma table à jour avec ces commandes OleDbDataAdapter DtaGrid = new OleDbDataAdapter("SELECT *


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,788 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales