示例#1
0
        void InitServerByDatabase()
        {
            using (var dataReader = DataHelper.Instance.ExecuteProcedureReader("InitServer"))
            {
                if (dataReader == null)
                {
                    return;                    // Stopwatch sw = Stopwatch.StartNew();
                }
                dataReader.Read();
                int count = dataReader.GetInt32(0);
                _list    = new List <TagMetaData>(count);//把所有激活的 数据库记录 都导入 _list<TagMetaData> 里面
                _mapping = new Dictionary <string, ITag>(count);
                dataReader.NextResult();
                while (dataReader.Read())
                {
                    var meta = new TagMetaData(dataReader.GetInt16(0), dataReader.GetInt16(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(10), (DataType)dataReader.GetByte(4),
                                               (ushort)dataReader.GetInt16(5), dataReader.GetBoolean(6), dataReader.GetFloat(7), dataReader.GetFloat(8), dataReader.GetInt32(9));

                    _list.Add(meta);
                    if (meta.Archive)
                    {
                        //Id 和Cycle 其实就是归档的时间,归档周期没有设定(0),则置为 null
                        _archiveTimes.Add(meta.ID, meta.Cycle == 0 ? null : new ArchiveTime(meta.Cycle, DateTime.MinValue));//归档的ID,归档的时间
                    }
                }
                _list.Sort();//只是id 排序就好了
                dataReader.NextResult();
                while (dataReader.Read())
                {
                    if (_driver != null)
                    {
                        IGroup grp = _driver.AddGroup(dataReader.GetString(1), dataReader.GetInt16(2), dataReader.GetInt32(3),
                                                      dataReader.GetFloat(4), dataReader.GetBoolean(5));
                        if (grp != null)
                        {
                            grp.AddItems(_list);//这里完成 从 _list<TagMetaData> 到 _list<ITag>的转换  ,这个地方是需要根据 GroupID 的不同,生成不同的组别,对应于不同的页面??
                        }
                    }
                }
            }
            //待归档的列表里面  有 超过一个的 变量,就开启归档
            if (_archiveTimes.Count > 0)
            {
                _hasHda       = true;
                _hda.Capacity = MAXHDACAP;//单次归档的最大数据 1 万条;
            }
        }