Hello tout le monde!

Donc voici mon petit défi du moment sur lequel je plante depuis quelques heures... !

J'ai les mêmes tables sur une DB Access qui est utilisée lorsque l'application est locale, sur un portable, pour des usagers en déplacement.

Lorsque ces mêmes usagers reviennent parmi nous, ils peuvent (doivent) synchronisé leurs données avec nos BD Oracle serveur.

J'ai donc exactement le même schema Access et Oracle, et je dois récupéré les données d'Access plus récentes dans Oracle.

Je me suis dit, allez, soyons fou, ce sont les même tables, il doit avoir moyen d'évité de se taper 12 Select/Insert/Update avec ADO.NET.

Voici mon bout de code actuel;`

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
'Opérations de transfert
            Dim TableAcc As DataTable
            Dim TableOra As DataTable
            Dim Requetes() As String = {Array de nom des tables}
            Dim ds As New DataSet
            For x As Integer = 0 To Requetes.Length - 1
'Appel des fonctions SELECT stockées sous l'appélation "Transfert_nomtable"
                Dim ressource As String = "Transfert_" + Requetes(x)
                Dim rm As New ResourceManager("ApplicationTransfert.RequeteAccess", Assembly.GetExecutingAssembly)
                Dim sql As String = rm.GetString(ressource)
                TableAcc = connAccess.executerRequete(sql, CommandType.Text)
                TableOra = connOra.executerRequete(sql, CommandType.Text)
                For Each row As DataRow In TableAcc.Rows
                    Dim conflit As Boolean
                    For Each rowOra As DataRow In TableOra.Rows
'On compare les premieres colonnes, qui sont toutes le ID
'On vérifie donc qu'il n'y a pas eu de modifications faites en local
                        If rowOra.Item(0).ToString = row.Item(0).ToString Then
                            conflit = True
                        End If
                    Next
                    If Not conflit Then
                        TableOra.ImportRow(row)
                    Else
                        ' Gestion des conflits encore a faire - pas d'existants encore
                    End If
                Next
                ds.Tables.Add(TableOra)
            Next
            ' On applique les modifications sur la Table Oracle
            Dim adapter As New Oracle.DataAccess.Client.OracleDataAdapter("SELECT 1 FROM DUAL", ApplicationSomVac.obtenirConnexionOracle.connexionString.ConnectionString)
            adapter.Fill(ds)
            Dim commbuilder As New Oracle.DataAccess.Client.OracleCommandBuilder(adapter)
            For Each dstable As DataTable In ds.Tables
                adapter.Update(ds, dstable.TableName)
            Next
            MessageBox.Show("La synchronisation à été effectuée avec succès!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
et je remettrais donc l'accent sur ce bout de code LÀ:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
' On applique les modifications sur la Table Oracle
            Dim adapter As New Oracle.DataAccess.Client.OracleDataAdapter("SELECT 1 FROM DUAL", ApplicationSomVac.obtenirConnexionOracle.connexionString.ConnectionString)
            adapter.Fill(ds)
            Dim commbuilder As New Oracle.DataAccess.Client.OracleCommandBuilder(adapter)
            For Each dstable As DataTable In ds.Tables
                adapter.Update(ds, dstable.TableName)
            Next
            MessageBox.Show("La synchronisation à été effectuée avec succès!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
je sais pas trop pourquoi j'ai un select dual, le adapter.fill me déclenchait une erreur comme quoi je n'avais pas de Select Command en place. Ça fait parti de mes essais sans résultat... mais c'est le code dans lequel je suis actuellement.

Donc voilà... au final tout ce que je cherche a faire c'est planté les données stockés dans le DataSet "ds" dans ma DB Oracle. Y'a surement un petit truc dans le jeu DataSet/Adapter/Source[...] que j'ai zappé, mais j'arrive pas a comprendre où/comment/pourquoi. J'ai rechercher pas mal sur le web, et je vois leurs bout de code presque identique au miens, et tout semble fonctionner chez eu, ca m'énerve un peu

Merci d'avance pour le coup de main,
Amuny.