OVH Cloud OVH Cloud

dataset + AcceptChanges

2 réponses
Avatar
Damien H.
bonjour,
je développe une appli qui me retourne des infos d'une Bdd sous sybase. ces
infos je les fait apparaître dans une datagrid et je les modifie.pour
retourner l'info dans la base sur un btn, j'y inscrit ds.AcceptChanges or
cela ne retourne pas l'info jusque la bdd.quelqu'un peut-il m'aider?
d'avance merci

2 réponses

Avatar
Bruno Chassagne
Bonjour,

Lorsque vous appelez la méthode AcceptChanges() sur un DataSet, vous ne
faites que valider les données qui y sont enfermées, un point c'est tout
(toutes les DataRow en état Deleted, Updated, etc. sont définitivement mises
à jour). Tout reste côté client, il n'y a strictement aucune communication
avec la base de données à ce moment-là. Il faut garder en mémoire qu'un
DataSet n'est rien d'autre qu'un cache de base de données, par définition
déconnecté.

Pour mettre à jour la base de données, la solution la plus directe proposée
par ADO.NET est de passer par un DataAdapter, qui peut se configurer via
l'IDE en quelques clics de souris. C'est vraiment ce qu'il y a de plus
simple, Visual Studio générant automatiquement les commandes INSERT, UPDATE,
DELETE, etc.

L'autre solution est de parcourir manuellement toutes les DataRow du
DataSet, et d'effectuer les opérations appropriées en fonction de l'état de
chaque ligne. Cela doit donc se faire AVANT d'appeler la méthode
AcceptChanges(). Par exemple, si une DataRow a l'état Updated, on appelera la
méthode ExecuteNonQuery() sur un objet OdbcCommand comprenant une instruction
SQL de type UPDATE.

Cordialement,

Bruno Chassagne

"Damien H." a écrit :

bonjour,
je développe une appli qui me retourne des infos d'une Bdd sous sybase. ces
infos je les fait apparaître dans une datagrid et je les modifie.pour
retourner l'info dans la base sur un btn, j'y inscrit ds.AcceptChanges or
cela ne retourne pas l'info jusque la bdd.quelqu'un peut-il m'aider?
d'avance merci


Avatar
Damien H.
bonjour,

je suis entierement d'accord avec la premiere solution (celle que j'ai
adopté d'ailleur) mais je dois avoir un pblm de synthaxe ...
Mon code est le suivant:
Private Sub Formulaire1_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim cpt As Integer
'on initialise la connexion
Cn = OleDbConnection1
Adapt = OleDbDataAdapter1
Affichage()
End Sub
Sub Affichage()
Cmd = New OleDb.OleDbCommand
Cmd.Connection = Cn
Cmd.CommandText = ChaineSql
'on ratache cette commande à notre Sql Adapteur
Adapt.SelectCommand = Cmd
Ds = New DataSet
Adapt.Fill(Ds, "TableX")
DataGrid1.DataSource = Ds
DataGrid1.DataMember = "TableX"
Cmd = Nothing
End Sub
Private Sub BtnValiderEnregistr_Click_1(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles BtnValiderEnregistr.Click
DataGrid1.Update()
Ds.AcceptChanges()
CmdBuild = New OleDb.OleDbCommandBuilder(Adapt)
Adapt.Update(Ds, "ChoixPep")
End Sub
Pourriez-vous m'aider SVP
Merci beaucoup

"Bruno Chassagne" wrote:

Bonjour,

Lorsque vous appelez la méthode AcceptChanges() sur un DataSet, vous ne
faites que valider les données qui y sont enfermées, un point c'est tout
(toutes les DataRow en état Deleted, Updated, etc. sont définitivement mises
à jour). Tout reste côté client, il n'y a strictement aucune communication
avec la base de données à ce moment-là. Il faut garder en mémoire qu'un
DataSet n'est rien d'autre qu'un cache de base de données, par définition
déconnecté.

Pour mettre à jour la base de données, la solution la plus directe proposée
par ADO.NET est de passer par un DataAdapter, qui peut se configurer via
l'IDE en quelques clics de souris. C'est vraiment ce qu'il y a de plus
simple, Visual Studio générant automatiquement les commandes INSERT, UPDATE,
DELETE, etc.

L'autre solution est de parcourir manuellement toutes les DataRow du
DataSet, et d'effectuer les opérations appropriées en fonction de l'état de
chaque ligne. Cela doit donc se faire AVANT d'appeler la méthode
AcceptChanges(). Par exemple, si une DataRow a l'état Updated, on appelera la
méthode ExecuteNonQuery() sur un objet OdbcCommand comprenant une instruction
SQL de type UPDATE.

Cordialement,

Bruno Chassagne

"Damien H." a écrit :

> bonjour,
> je développe une appli qui me retourne des infos d'une Bdd sous sybase. ces
> infos je les fait apparaître dans une datagrid et je les modifie.pour
> retourner l'info dans la base sur un btn, j'y inscrit ds.AcceptChanges or
> cela ne retourne pas l'info jusque la bdd.quelqu'un peut-il m'aider?
> d'avance merci