2010-11-29 8 views
0

J'ai défini 2 ensembles de données et 2 DataAdapters (un pour chacun des ensembles de données). Après avoir créé, pour chacun des 2 DataAdapters, je définis un SqlCommandBuilder. Tout va bien jusqu'à ici. Je peux ajouter, modifier, effacer très ok de la base de données en utilisant dataAdapter1.Update (dataSet1) .. MAIS pas dans cet ordre: effacer, ajouter, modifier.Violation de la concurrence: la commande UpdateCommand a affecté 0 des enregistrements 1 attendus. DB concurrencyException was uncle

Voici le code pour le premier jeu de données, dataAdapter et SqlCommandBuilder:

   string sql = "SELECT * From localitati"; 
       da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
       da1.Fill(ds1, "localitati"); 
       cmdBuilder1 = new SqlCommandBuilder(da1); 

Et la seconde:

  sql = "SELECT * From sucursale"; 
      da2 = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
      da2.Fill(ds2, "sucursale"); 
      //face automat select, insert ,etc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      cmdBuilder2 = new SqlCommandBuilder(da2); 

Toutes les idées pourquoi est-ce qui se passe?

+0

Code incomplet, pas de description réelle du problème. –

Répondre

12

Vos informations fournies ne sont d'aucune utilité. Mais je peux expliquer la signification de l'erreur.

Chaque commande de mise à jour écrite en ADO.Net est de la forme:

Update col1, col2 where col1=col1value AND col2=col2value 

ADO.Net conserve la valeur de la colonne quand il a été sélectionné dans la base de données. Quand il effectue la mise à jour, la condition est qu'aucune des colonnes n'ait été modifiée lors de la validation.

La raison pour laquelle vous voyez l'erreur est que la ligne de base de données a changé entre l'exécution de la sélection et l'appel da2.UpdateChanges(ds2). Si vous examinez la logique, vous avez peut-être sélectionné la valeur de la ligne dans deux jeux de données distincts (ou dans deux threads différents) et effectué une mise à jour après avoir effectué la sélection.

Questions connexes