public static List <DimTracker> GetDimTrackers(this DatabaseWrapper conn)
        {
            IDbCommand cmd = conn.CreateCommand();

            cmd.CommandText = "SELECT * FROM Dim_Tracker WHERE validto IS NULL;";
            List <DimTracker> data = new List <DimTracker>();

            using (IDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    DimTracker obj = new DimTracker();
                    obj.Recid        = (long)reader["recid"];
                    obj.Serial       = (string)reader["serial"];
                    obj.Validfrom    = (DateTime)reader["validfrom"];
                    obj.Validto      = (DBNull.Value == reader["validto"]) ? null : (DateTime?)reader["validto"];
                    obj.Name         = (DBNull.Value == reader["name"]) ? null : (string)reader["name"];
                    obj.Productkey   = (DBNull.Value == reader["productkey"]) ? null : (string)reader["productkey"];
                    obj.Thirdpartyid = (DBNull.Value == reader["thirdpartyid"]) ? null : (string)reader["thirdpartyid"];
                    obj.Tags         = (DBNull.Value == reader["tags"]) ? null : (string)reader["tags"];
                    obj.TBRefId      = (DBNull.Value == reader["tbref"]) ? null : (long?)reader["tbref"];
                    data.Add(obj);
                }
            }
            data.ForEach(x => { if (x.TBRefId != null)
                                {
                                    x.TBRef = conn.GetTBMap((long)x.TBRefId);
                                }
                         });

            return(data);
        }
        public static DimTracker GetDimTracker(this DatabaseWrapper conn, string serial)
        {
            DimTracker obj = new DimTracker();
            IDbCommand cmd = conn.CreateCommand();

            cmd.CommandText = $"SELECT * FROM Dim_Tracker WHERE validto IS NULL AND serial = {SqlConvert.Convert(serial)};";
            using (IDataReader reader = cmd.ExecuteReader())
            {
                if (!reader.Read())
                {
                    return(null);
                }
                obj.Recid        = (long)reader["recid"];
                obj.Serial       = (string)reader["serial"];
                obj.Validfrom    = (DateTime)reader["validfrom"];
                obj.Validto      = (DBNull.Value == reader["validto"]) ? null : (DateTime?)reader["validto"];
                obj.Name         = (DBNull.Value == reader["name"]) ? null : (string)reader["name"];
                obj.Productkey   = (DBNull.Value == reader["productkey"]) ? null : (string)reader["productkey"];
                obj.Thirdpartyid = (DBNull.Value == reader["thirdpartyid"]) ? null : (string)reader["thirdpartyid"];
                obj.Tags         = (DBNull.Value == reader["tags"]) ? null : (string)reader["tags"];
                obj.TBRefId      = (DBNull.Value == reader["tbref"]) ? null : (long?)reader["tbref"];
            }
            if (obj.TBRefId != null)
            {
                obj.TBRef = conn.GetTBMap((long)obj.TBRefId);
            }
            return(obj);
        }