/// ////////////////////////////////////////////////////////////////// /// 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); }
/// ///////////////////////////////////////////////////////////////////////////// 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); }
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(); } } }
/// ///////////////////////////////////////////////////////// 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); }