Bonjour,
Issu de la programmation VBA pour Access je me suis lancé dans le développement d’une application VB.net avec VS 2008 et j’ai beaucoup de mal avec OleDB.
Mon application exploite une base de données SQL Server 2008R2.
Je veux utiliser le contrôle DataGridView au moins pour l’entretien des tables de données de base qui présentent peu de particularités de gestion.
Dans ces tables ma clé est constituée par une valeur entière qui n’est pas un compteur, je la saisis moi-même lors de la création d’une nouvelle ligne.
Mon DatagridView est alimenté par une DataTable issue d’un DataAdapter pour lequel j’ai défini les méthodes Update, insert et delete en utilisant un CommandBuiler comme indiqué dans l’extrait de code ci-dessous.
mTb est la DataTable source
mTxtSource est la chaine SQL de sélection des données ex:
)
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT ChampA, ChampB, ChampC FROM [MATABLE] ORDER BY ChampB;
Dans l’ensemble ça fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 mCn = New SqlConnection(Bdd.ChaineConnexionOleDB) mCn.Open() mDa = New SqlDataAdapter(mTxtSource, mCn) mCb = New SqlCommandBuilder(mDa) mDa.UpdateCommand = mCb.GetUpdateCommand() mDa.InsertCommand = mCb.GetInsertCommand() mDa.DeleteCommand = mCb.GetDeleteCommand() mTb = New DataTable mDa.Fill(mTb) ' lecture des données
Le problème que je rencontre est le suivant :
Lorsque j’ajoute une ligne dans mon DataGridView son insertion dans la table sous-jacente s’effectue correctement (je le vérifie via SQL management studio),
si ensuite je modifie une autre ligne existante pas de problème non plus mais si,
sans avoir fermé mon DataGridView, je modifie la ligne nouvellement ajoutée, j’ai l’erreur suivante au moment de son enregistrement:
"Violation de l'accès concurrentiel : UpdateCommand a affecté 0 des enregistrements 1 attendus."
Pouvez-vous me donner une piste pour résoudre ce problème sur lequel j’ai déjà passé pas mal de temps ?
Question subsidiaire : est-il possible d’associer le DataGridView à un recordset ADOBDB ?
Merci.
Partager