Esempio n. 1
0
        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();
                        }
                    }
                }
            }
        }
Esempio n. 2
0
    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();
      }
    }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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;
            }
        }