OVH Cloud OVH Cloud

dataadapter et updatecommand .net2005

3 réponses
Avatar
Laurent
bonjour,
j'ai un soucis avec un dataadapter qui ne veut pas updater mes lignes, j'ai
l'erreur suivante : dbconcurrencyexception.
quelqu'un aurait il une idée ?

voici mon code :
//update command
maCommand = new OleDbCommand("UPDATE author SET aut_nom = @NOM, aut_prenom =
@PRENOM WHERE aut_id = @ID", maConnection);
monParametre = new OleDbParameter("@ID", OleDbType.BigInt);
monParametre.SourceColumn = "aut_id";
monParametre.SourceVersion = DataRowVersion.Original;
maCommand.Parameters.Add(monParametre);
monParametre = new OleDbParameter("@NOM", OleDbType.VarChar, 50);
monParametre.SourceColumn = "aut_nom";
maCommand.Parameters.Add(monParametre);
monParametre = new OleDbParameter("@PRENOM", OleDbType.VarChar, 50);
monParametre.SourceColumn = "aut_prenom";
maCommand.Parameters.Add(monParametre);
monDataAdapter.UpdateCommand = maCommand;

--
Laurent M.
Développeur .NET

3 réponses

Avatar
mboizeau
L'exception lévée signifie qu'aucune ligne n'a été mise à jour.
je vois deux pistes:
- un problème dans les paramètres (aut_id inexistant?)
- un acces concurentiel bloquant la mise a jour, dans ce cas il faut
fermer toutes les autres connections sur la base avant de tester.

OTH

marc Boizeau

http://oraclevsmicrosoft.blogspot.com



Laurent a écrit :
bonjour,
j'ai un soucis avec un dataadapter qui ne veut pas updater mes lignes, j' ai
l'erreur suivante : dbconcurrencyexception.
quelqu'un aurait il une idée ?

voici mon code :
//update command
maCommand = new OleDbCommand("UPDATE author SET aut_nom = @NOM, aut_p renom =
@PRENOM WHERE aut_id = @ID", maConnection);
monParametre = new OleDbParameter("@ID", OleDbType.BigInt);
monParametre.SourceColumn = "aut_id";
monParametre.SourceVersion = DataRowVersion.Original;
maCommand.Parameters.Add(monParametre);
monParametre = new OleDbParameter("@NOM", OleDbType.VarChar, 50);
monParametre.SourceColumn = "aut_nom";
maCommand.Parameters.Add(monParametre);
monParametre = new OleDbParameter("@PRENOM", OleDbType.VarChar, 50);
monParametre.SourceColumn = "aut_prenom";
maCommand.Parameters.Add(monParametre);
monDataAdapter.UpdateCommand = maCommand;

--
Laurent M.
Développeur .NET


Avatar
mboizeau
L'exception lévée signifie qu'aucune ligne n'a été mise à jour.
je vois deux pistes:
- un problème dans les paramètres (aut_id inexistant?)
- un acces concurentiel bloquant la mise a jour, dans ce cas il faut
fermer toutes les autres connections sur la base avant de tester.

OTH

marc Boizeau

http://oraclevsmicrosoft.blogspot.com



Laurent a écrit :
bonjour,
j'ai un soucis avec un dataadapter qui ne veut pas updater mes lignes, j' ai
l'erreur suivante : dbconcurrencyexception.
quelqu'un aurait il une idée ?

voici mon code :
//update command
maCommand = new OleDbCommand("UPDATE author SET aut_nom = @NOM, aut_p renom =
@PRENOM WHERE aut_id = @ID", maConnection);
monParametre = new OleDbParameter("@ID", OleDbType.BigInt);
monParametre.SourceColumn = "aut_id";
monParametre.SourceVersion = DataRowVersion.Original;
maCommand.Parameters.Add(monParametre);
monParametre = new OleDbParameter("@NOM", OleDbType.VarChar, 50);
monParametre.SourceColumn = "aut_nom";
maCommand.Parameters.Add(monParametre);
monParametre = new OleDbParameter("@PRENOM", OleDbType.VarChar, 50);
monParametre.SourceColumn = "aut_prenom";
maCommand.Parameters.Add(monParametre);
monDataAdapter.UpdateCommand = maCommand;

--
Laurent M.
Développeur .NET


Avatar
Guillaume Davion
Le problème vient du fait que le DataAdapter est paramétré pour
fonctionner en mode optimiste : toute modification sur les données
pendant l'édition fait qu'une erreur monte.
Ca se voit dans la requête d'update : tous les champs sont testés
dans le where. Du coup, si il y a un accès cooncurentiel à cette
ligne de donnée et que quelqu'un modifie un seul champ, l'update qui
vient ensuite échoue, vu qu'aucune ligne n'est mise à jour.