예제 #1
0
        /// //////////////////////////////////////////////////////////////////
        /// le data du result contient le dataset à appliquer à la base distante
        public CResultAErreur GetModifsInMain(
            int nIdSyncSessionFrom,
            int nIdSyncSessionSecondaireCourant,
            string strCodeGroupeSynchronisation)
        {
            CResultAErreur                   result        = CResultAErreur.True;
            CFiltresSynchronisation          filtres       = GetFiltres(strCodeGroupeSynchronisation);
            IDatabaseConnexionSynchronisable connexionMain = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, m_strIdConnexion);
            int nIdSyncMain = connexionMain.IdSyncSession;

            while (connexionMain.IdSyncSession <= nIdSyncSessionSecondaireCourant)
            {
                connexionMain.IncrementeSyncSession();
            }

            CContexteDonneesSynchro ctxMain = new CContexteDonneesSynchro(IdSession, true);
            bool bHasChange = false;

            ctxMain.FillWithModifsFromVersion(nIdSyncSessionFrom == -1?-1:nIdSyncSessionFrom + 1, nIdSyncMain, ref bHasChange, filtres, false);
            if (bHasChange)
            {
                DataSet dsRetour = new DataSet();
                foreach (DataTable table in ctxMain.Tables)
                {
                    if (table.Rows.Count != 0)
                    {
                        DataTable tableCopie = CUtilDataSet.AddTableCopie(table, dsRetour);
                        ArrayList lst        = new ArrayList();
                        foreach (DataColumn col in tableCopie.Columns)
                        {
                            if (col.DataType == typeof(CDonneeBinaireInRow))
                            {
                                lst.Add(col);
                            }
                        }
                        foreach (DataColumn col in lst)
                        {
                            tableCopie.Columns.Remove(col);
                        }

                        foreach (DataRow row in table.Rows)
                        {
                            tableCopie.ImportRow(row);
                        }
                    }
                }
                dsRetour.ExtendedProperties[c_cleIdSynchro] = nIdSyncMain;
                result.Data = dsRetour;
            }
            return(result);
        }
예제 #2
0
        /// /////////////////////////////////////////////////////////////////////////////
        public int Update(DataSet dsSource)
        {
            DataTable tableSource = dsSource.Tables[m_strNomTable];

            if (tableSource == null)
            {
                return(0);
            }
#if PDA
            CUtilDataSet.Merge(tableSource, m_connexion.DataSet, false);
#else
            m_connexion.DataSet.Merge(tableSource);
#endif
            return(1);
        }
예제 #3
0
        public void RedoModifs(ref DataTable table)
        {
            if (m_tableDesDifferences != null)
            {
                if (table == null)
                {
                    table = (DataTable)m_tableDesDifferences.Clone();
                }
                if (m_tableDesDifferences.PrimaryKey.Length == 0)
                {
                    //C'est donc toute la table
                    table.Rows.Clear();
                    table.Merge(m_tableDesDifferences);
                    table.AcceptChanges();
                }
                else
                {
                    DataSet ds = new DataSet();
                    //Vérifie les types des colonnes
                    foreach (DataColumn col in table.Columns)
                    {
                        DataColumn colModif = m_tableDesDifferences.Columns[col.ColumnName];
                        if (colModif != null && colModif.DataType != col.DataType)
                        {
                            CUtilDataSet.ChangeTypeColonne(ref colModif, col.DataType);
                        }
                    }
                    table.AcceptChanges();
                    ds.Tables.Add(table);
                    table.BeginLoadData();
                    table.Merge(m_tableDesDifferences, false);
                    //CUtilDataSet.Merge(m_tableDesDifferences, ds, false);
                    ds.Tables.Remove(table);

                    table.EndLoadData();
                    table.AcceptChanges();
                }
            }
        }
예제 #4
0
        /// /////////////////////////////////////////////////////////
        public DataSet GetAddAndUpdateInTableMain(
            string strNomTable,
            int nSessionSyncDebut,
            int nSessionSyncFin,
            string strCodeGroupeSynchronisation)
        {
            Type    tp     = CContexteDonnee.GetTypeForTable(strNomTable);
            DataSet dsDest = null;

            if (tp == null)
            {
                return(null);
            }

            //Récupère les filtres
            CFiltresSynchronisation filtres = GetFiltres(strCodeGroupeSynchronisation);

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CFiltreData filtreSynchro = null;
                if (filtres != null)
                {
                    filtreSynchro = filtres.GetFiltreForTable(m_nIdSession, strNomTable);
                }

                if (filtreSynchro == null)
                {
                    filtreSynchro = new CFiltreData();
                }
                int    nNumParametreIdSync = filtreSynchro.Parametres.Count + 1;
                string strFiltre           = filtreSynchro.Filtre;
                filtreSynchro.Filtre = "(" + CSc2iDataConst.c_champIdSynchro + ">=@" + nNumParametreIdSync.ToString() + " and " +
                                       CSc2iDataConst.c_champIdSynchro + "<=@" + (nNumParametreIdSync + 1).ToString();
                if (nSessionSyncDebut == -1)
                //C'est la première synchro, intègre les éléments modifiés avant prise en charge
                //des synchros
                {
                    if (filtreSynchro is CFiltreDataAvance)
                    {
                        filtreSynchro.Filtre += " or hasno(" + CSc2iDataConst.c_champIdSynchro + ")";
                    }
                    else
                    {
                        filtreSynchro.Filtre += " or " + CSc2iDataConst.c_champIdSynchro + " is null";
                    }
                }
                filtreSynchro.Filtre += ")";
                if (strFiltre != "")
                {
                    filtreSynchro.Filtre += " and (" + strFiltre + ")";
                }
                filtreSynchro.Parametres.Add(nSessionSyncDebut);
                filtreSynchro.Parametres.Add(nSessionSyncFin);
                CListeObjetsDonnees liste = new CListeObjetsDonnees(contexte, tp, false);
                liste.Filtre = filtreSynchro;
                liste.AssureLectureFaite();

                //Charge les données de synchronisation
                CFiltreData filtreDataSync = new CFiltreData(CEntreeLogSynchronisation.c_champTable + "=@1 and " +
                                                             CSc2iDataConst.c_champIdSynchro + ">=@2 and " +
                                                             CSc2iDataConst.c_champIdSynchro + "<=@3",
                                                             strNomTable, nSessionSyncDebut, nSessionSyncFin);
                liste        = new CListeObjetsDonnees(contexte, typeof(CEntreeLogSynchronisation), false);
                liste.Filtre = filtreDataSync;
                liste.AssureLectureFaite();

                //Transforme le contexte en dataset (pour sérialisation web !! )
                dsDest = new DataSet();
                foreach (DataTable table in contexte.Tables)
                {
                    DataTable tableDest = CUtilDataSet.AddTableCopie(table, dsDest);
                    foreach (DataRow row in table.Rows)
                    {
                        tableDest.ImportRow(row);
                    }
                    //Supprime les colonnes blob
                    for (int nCol = tableDest.Columns.Count - 1; nCol >= 0; nCol--)
                    {
                        if (tableDest.Columns[nCol].DataType == typeof(CDonneeBinaireInRow))
                        {
                            tableDest.Columns.RemoveAt(nCol);
                        }
                    }
                }
            }
            return(dsDest);
        }