public void Pruefen(params SqlParameter[] Parameter) { var daten = _Db.Database.SqlQuery <DatenVergleich>(SqlText, Parameter).ToList(); foreach (var ds in daten) { var vorhanden = _Entity.Find(ds.Id); if (vorhanden != null) { var entVorhanden = _Db.Entry(vorhanden); if (entVorhanden.ComplexProperty("DatenAbgleich").Property("Datum").CurrentValue != null) { if (Convert.ToDateTime(entVorhanden.ComplexProperty("DatenAbgleich").Property("Datum").CurrentValue) != ds.DatenAbgleich_Datum) { entVorhanden.Reload(); } } } } }
public static async Task ListeAktualisieren<T>(JgModelContainer Db, IEnumerable<T> Liste) where T : class { var propId = typeof(T).GetProperty("Id"); var propDateAbleich = typeof(T).GetProperty("DatenAbgleich"); var dicDs = new SortedDictionary<Guid, T>(); foreach (var ds in Liste) dicDs.Add((Guid)propId.GetValue(ds), ds); // geänderte Datensätze aktualisieren, Wenn mehr als 500 Datensätze dann keine Aktualisierung if ((dicDs.Count != 0) && (dicDs.Count < 2000)) { var sbAbfrageText = new StringBuilder(); foreach (var ds in dicDs) sbAbfrageText.AppendLine($" ('{ds.Key.ToString()}','{(propDateAbleich.GetValue(ds.Value) as DatenAbgleich).Datum.ToString("dd.MM.yyyy HH:mm:ss")}'),"); var sqlText = "IF OBJECT_ID(N'tempdb..#TempDs', N'U') IS NOT NULL DROP TABLE #TempDs \n" + "CREATE TABLE #TempDs (Id uniqueidentifier NOT NULL, Datum char(19) NOT NULL) \n" + "INSERT INTO #TempDs VALUES \n" + sbAbfrageText.ToString().Substring(0, sbAbfrageText.ToString().Length - 3) + "\n" + "SELECT Id FROM #TempDs as t \n" + " WHERE EXISTS(SELECT * FROM " + typeof(T).Name + "Set WHERE (Id = t.Id) AND (FORMAT(DatenAbgleich_Datum , 'dd/MM/yyyy HH:mm:ss') <> t.Datum))"; var idisAendern = new List<Guid>(); var sc = Db.Database.Connection.ConnectionString; using (var con = new SqlConnection(sc)) { await con.OpenAsync(); var cl = new SqlCommand(sqlText, con); using (var reader = await cl.ExecuteReaderAsync()) { while (reader.Read()) idisAendern.Add((Guid)reader[0]); } } foreach (var ds in idisAendern) await Db.Entry<T>(dicDs[ds]).ReloadAsync(); } }
public static void ArbeitszeitenInDatenbank(OptionenArbeitszeit Optionen) { var msg = ""; try { using (var Db = new JgModelContainer()) { if (Optionen.VerbindungsString != "") { Db.Database.Connection.ConnectionString = Optionen.VerbindungsString; } msg = "Beginne Eintragungen in Datenbank."; Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose); if (Optionen.ListeAnmeldungen.Count > 0) { var azImport = new ArbeitszeitImport(); azImport.ImportStarten(Db, Optionen.ListeAnmeldungen); Db.SaveChanges(); msg = $"{azImport.AnzahlAnmeldungen} Anmeldungen erfolgreich in Datenbank gespeichert.\n\n{azImport.ProtokollOk}"; Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose); if (azImport.ProtokollFehler != null) { msg = $"Anmeldungen ohne Benutzerzuordnung!\n\n{azImport.ProtokollFehler}"; Logger.Write(msg, "Service", 0, 0, TraceEventType.Warning); } } foreach (var term in Optionen.ListeTerminals) { if ((term.TerminaldatenWurdenAktualisiert) || (term.FehlerTerminalAusgeloest) || ((!term.FehlerTerminalAusgeloest) && (term.AnzahlFehler != 0))) { Db.tabArbeitszeitTerminalSet.Attach(term); Db.Entry(term).State = EntityState.Modified; // Terminals die erfolgreich geUpdatet wurden eintragen if (term.TerminaldatenWurdenAktualisiert) { term.UpdateTerminal = false; } // Wenn Fehleranzahl erreicht wurde, Fehler anzeigen und FehlerAnzahl auf 0 setzen if (term.FehlerTerminalAusgeloest) { term.AnzahlFehler = (short)(term.AnzahlFehler + 1); if (term.AnzahlFehler >= Optionen.AnzahlBisFehlerAusloesen) { term.AnzahlFehler = 0; msg = $"Fehleranzahl Verbindungsaufbau Terminal {term.Bezeichnung} / {term.eStandort.Bezeichnung} größer {Optionen.AnzahlBisFehlerAusloesen}."; Logger.Write(msg, "Service", 0, 0, TraceEventType.Error); } } else { if (term.AnzahlFehler != 0) { term.AnzahlFehler = 0; } } msg = $"Terminal {term.Bezeichnung} / {term.eStandort.Bezeichnung} aktualisiert."; Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose); } } Db.SaveChanges(); } } catch (Exception f) { msg = "Fehler beim eintragen der Anmeldedaten in die Datenbank."; throw new MyException(msg, f); } }
public void DatenAktualisieren() { if (OnDatenLaden != null) { Mouse.OverrideCursor = Cursors.Wait; var propId = typeof(K).GetProperty("Id"); var propDateAbleich = typeof(K).GetProperty("DatenAbgleich"); var lNeu = OnDatenLaden(_Db, new JgEntityListEventArgs(Parameter, false, IstSortierung)); var dicAlt = new SortedDictionary <Guid, K>(); var dicNeu = new SortedDictionary <Guid, K>(); foreach (var ds in _Daten) { dicAlt.Add((Guid)propId.GetValue(ds), ds); } foreach (var ds in lNeu) { dicNeu.Add((Guid)propId.GetValue(ds), ds); } // Nicht mehr relevante Datensätze entfernen foreach (var dsAlt in dicAlt) { if (!dicNeu.ContainsKey(dsAlt.Key)) { _Daten.Remove(dsAlt.Value); } } // Neue Datensätze hinzufügen foreach (var dsNeu in dicNeu) { if (!dicAlt.ContainsKey(dsNeu.Key)) { _Daten.Add(dsNeu.Value); } } // geänderte Datensätze aktualisieren, Wenn mehr als 500 Datensätze dann keine Aktualisierung if ((dicNeu.Count != 0) && (dicNeu.Count < 500)) { var sbAbfrageText = new StringBuilder(); foreach (var ds in dicNeu) { sbAbfrageText.AppendLine($" ('{ds.Key.ToString()}','{(propDateAbleich.GetValue(ds.Value) as DatenAbgleich).Datum.ToString("dd.MM.yyyy HH:mm:ss")}'),"); } var sqlText = "IF OBJECT_ID(N'tempdb..#TempDs', N'U') IS NOT NULL DROP TABLE #TempDs \n" + "CREATE TABLE #TempDs (Id uniqueidentifier NOT NULL, Datum char(19) NOT NULL) \n" + "INSERT INTO #TempDs VALUES \n" + sbAbfrageText.ToString().Substring(0, sbAbfrageText.ToString().Length - 3) + "\n" + "SELECT Id FROM #TempDs as t \n" + " WHERE EXISTS(SELECT * FROM " + typeof(K).Name + "Set WHERE (Id = t.Id) AND (FORMAT(DatenAbgleich_Datum , 'dd/MM/yyyy HH:mm:ss') <> t.Datum))"; var idisAendern = new List <Guid>(); var sc = _Db.Database.Connection.ConnectionString; using (var con = new SqlConnection(sc)) { con.Open(); var cl = new SqlCommand(sqlText, con); using (var reader = cl.ExecuteReader()) { while (reader.Read()) { idisAendern.Add((Guid)reader[0]); } } } foreach (var ds in idisAendern) { _Db.Entry <K>(dicNeu[ds]).Reload(); } } Mouse.OverrideCursor = null; } }