예제 #1
0
        /// <summary>
        /// Diese Methode legt die Daten eines OpcUaServers in der SQL Datenbank ab.
        /// </summary>
        /// <param name="serverLabel"></param>
        /// <param name="serverOpcUrl"></param>
        public async Task SaveServerAsync(string serverLabel, string serverOpcUrl)
        {
            // Mit diesem using wird über das EF Core Framework auf die Datenbank zugegriffen.
            using (OpcUaDataDbContext ctx = new OpcUaDataDbContext(sqlDbOptionsBuilder))
            {
                // Hier werden Datenbankeinträge mit der gleichen OpcUaUrl abgefragt.
                var opcuaserver = await ctx.OpcUaServer
                                  .Where(b => b.OpcUaUrl.Contains(serverOpcUrl))
                                  .ToListAsync();

                // Wenn kein Eintrag vorhanden ist:
                if (opcuaserver.Count == 0)
                {
                    // Hier wird zuerst ein Instanz von OpcUaServer erstellt welche der Datenbank übergeben wird.
                    SqlOpcUaServer server = new SqlOpcUaServer(serverLabel, serverOpcUrl);
                    // Die Daten werden dem Kontext hinzugefügt.
                    ctx.OpcUaServer.Add(server);

                    // Es wird versucht die Daten des Kontexts der Datenbank hinzuzufügen, bzw. die Datenbank zu aktualisieren.
                    try
                    {
                        var anz = await ctx.SaveChangesAsync();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Hier wird die SqlId des OPC UA Servers  in der Datenbank abgefragt und zurückgegeben.
        /// </summary>
        /// <param name="serverLabel"></param>
        /// <param name="serverOpcUrl"></param>
        /// <returns>int SQLID des OPC UA Servers</returns>
        public async Task <int> GetSqlServerId(string serverLabel, string serverOpcUrl)
        {
            // Hier wird die Variable für den Primärschlüssel definiert
            int key = 0;

            // Mit diesem using wird über das EF Core Framework auf die Datenbank zugegriffen.
            using (OpcUaDataDbContext ctx = new OpcUaDataDbContext(sqlDbOptionsBuilder))
            {
                // Hier wird abgefragt, ob die Datenbank Einträge mit der gleichen OpcUaURL enthält.
                var opcuaserver = await ctx.OpcUaServer
                                  .Where(b => b.OpcUaUrl.Contains(serverOpcUrl))
                                  .ToListAsync();

                // Wenn kein Eintrag vorhanden ist:
                if (opcuaserver.Count > 1)
                {
                    Exception ex = new Exception("Es liegt ein Datenbankfehler vor. Mehrere Server Elemente mit der gleichen URL wurden angelegt.");
                    throw ex;
                }

                //Der Primarykey wird ausgelesen
                key = opcuaserver.FirstOrDefault().OpcUaServerId;
            }

            //Der Primärykey wird zurückgegeben
            return(key);
        }
예제 #3
0
        /// <summary>
        /// Hier werden die Variablen in die SQL Datenbank geschrieben.
        /// </summary>
        /// <param name="sqlOpcUaServerId"></param>
        /// <param name="varLabel"></param>
        /// <param name="nodeId"></param>
        /// <returns></returns>
        public async Task SaveVariableAsync(int sqlOpcUaServerId, string varLabel, string nodeId)
        {
            // Mit diesem Using wird über das EF Core Framework auf die Datenbank zugegriffen.
            using (var ctx = new OpcUaDataDbContext(sqlDbOptionsBuilder))
            {
                // Der Servereintrag, dem die Variable zugeordnet werden, wird gesucht.
                await ctx.OpcUaServer.ToListAsync();

                var server = await ctx.OpcUaServer.FindAsync(sqlOpcUaServerId);

                // Die bereits vorhandenen Variablen Einträge werden ausfindig gemacht.
                var opcuavars = await ctx.OpcUaVariable
                                .Where(b => b.OpcUaServerId.Equals(sqlOpcUaServerId))
                                .ToListAsync();

                bool varexists = false;

                foreach (var opcvar in opcuavars)
                {
                    if (opcvar.NodeID == nodeId)
                    {
                        varexists = true;
                    }
                }

                if (!varexists)
                {
                    SqlOpcUaVariable variable = new SqlOpcUaVariable(varLabel, nodeId);
                    server.OpcUaVariablen.Add(variable);

                    // Es wird versucht die Daten des Kontexts der Datenbank hinzuzufügen, bzw. die Datenbank zu aktualisieren.
                    try
                    {
                        var anz = await ctx.SaveChangesAsync();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Die aktuellen Werte werden in die SQL Datenbank geschrieben.
        /// </summary>
        /// <param name="sqlOpcUaServerId"></param>
        /// <param name="nodeId"></param>
        /// <param name="displayName"></param>
        /// <param name="value"></param>
        /// <param name="status"></param>
        /// <param name="timestamp"></param>
        /// <returns></returns>
        public async void SaveValueAsync(int sqlOpcUaServerId, string nodeId, string displayName, string value, string status, DateTime timestamp)
        {
            SqlOpcUaWert wert = new SqlOpcUaWert
            {
                DisplayName = displayName,
                Wert        = value,
                Status      = status,
                Zeitstempel = timestamp
            };

            // Mit diesem Using wird über das EF Core Framework auf die Datenbank zugegriffen.
            using (var ctx = new OpcUaDataDbContext(sqlDbOptionsBuilder))
            {
                // Der Servereintrag, dem die Variable zugeordnet werden, wird gesucht.
                await ctx.OpcUaServer.ToListAsync();

                var server = await ctx.OpcUaServer.FindAsync(sqlOpcUaServerId);

                // Die bereits vorhandenen Variablen Einträge werden ausfindig gemacht.
                var opcuavars = await ctx.OpcUaVariable
                                .Where(b => b.OpcUaServerId.Equals(sqlOpcUaServerId))
                                .ToListAsync();

                var variable = opcuavars.Where(b => b.NodeID.Contains(nodeId)).FirstOrDefault();

                // Wert wird zur Variable hinzugefügt.
                variable.OpcUaWerte.Add(wert);

                // Es wird versucht die Daten des Kontexts der Datenbank hinzuzufügen, bzw. die Datenbank zu aktualisieren.
                try
                {
                    var anz = await ctx.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }