Exemplo n.º 1
0
        private void ProcessXmlFile(FiasFileInfo aFileInfo)
        {
            var databaseMap = FiasDatabaseMap.LoadFromFile(RootFolder + "\\Fias.Mapping.xml");

            var itemWorker = new FiasDbUpdateWorkerItemWorker
            {
                Connection  = connection,
                DbCache     = DbCache,
                FileInfo    = aFileInfo,
                DatabaseMap = databaseMap,
                StopEvent   = stopEvent
            };

            itemWorker.Execute();
        }
Exemplo n.º 2
0
        private void DoCacheLength()
        {
            cacheLength.Clear();
            DbConnection connection;

            if (ServerType == ServerType.Firebird)
            {
                connection = new FbConnection(ConnectionString);
            }
            else
            {
                connection = new SqlConnection(ConnectionString);
            }
            try
            {
                connection.Open();
                using (var transaction = connection.BeginTransaction())
                {
                    var databaseMap =
                        FiasDatabaseMap.LoadFromFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +
                                                     "\\Fias.Mapping.xml");
                    foreach (var tableMap in databaseMap.Tables)
                    {
                        if (stopEvent.WaitOne(0))
                        {
                            return; //throw new StopException();
                        }
                        var pkFieldMap = tableMap.Fields.First(a => a.IsPrimaryKey);
                        var length     =
                            Convert.ToInt32(DbData.GetFieldValue(connection, transaction,
                                                                 string.Format("select count({0})from {1};", pkFieldMap.DatabaseName,
                                                                               tableMap.DatabaseName)));
                        cacheLength.Add(tableMap.DatabaseName, length);
                    }
                }
            }
            finally
            {
                connection.Dispose();
            }
        }
Exemplo n.º 3
0
        private void DoCache()
        {
            if (OnRebuildCacheStart != null)
            {
                OnRebuildCacheStart();
            }
            try
            {
                cache.Clear();
                DbConnection connection;
                if (ServerType == ServerType.Firebird)
                {
                    connection = new FbConnection(ConnectionString);
                }
                else
                {
                    connection = new SqlConnection(ConnectionString);
                }
                try
                {
                    connection.Open();
                    using (var transaction = connection.BeginTransaction())
                    {
                        var databaseMap =
                            FiasDatabaseMap.LoadFromFile(
                                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Fias.Mapping.xml");
                        foreach (var tableMap in databaseMap.Tables)
                        {
                            var pkFieldMap = tableMap.Fields.First(a => a.IsPrimaryKey);
                            using (var query = new DbQuery(connection, transaction))
                            {
                                var counter = 0;
                                var set     = new HashSet <string>();
                                cache.Add(tableMap.DatabaseName, set);

                                var sql = ServerType == ServerType.Firebird ? "select trim({0}) {0} from {1};" : "select rtrim(ltrim({0})) {0} from {1};";
                                query.SqlText = string.Format(sql,
                                                              pkFieldMap.DatabaseName, tableMap.DatabaseName);
                                query.ExecuteDataReader();
                                while (query.DataReader.Read())
                                {
                                    if (stopEvent.WaitOne(0))
                                    {
                                        throw new StopException();
                                    }
                                    set.Add(query.DataReader[pkFieldMap.DatabaseName].ToString());

                                    if (++counter % 100000 != 0)
                                    {
                                        continue;
                                    }
                                    if (OnRebuildCache == null)
                                    {
                                        continue;
                                    }
                                    OnRebuildCache(counter,
                                                   cacheLength.ContainsKey(tableMap.DatabaseName)
                                            ? cacheLength[tableMap.DatabaseName]
                                            : 0, tableMap.DatabaseName);
                                }
                            }
                        }
                    }
                }
                finally
                {
                    connection.Dispose();
                }
            }
            finally
            {
                if (OnRebuildCacheComplete != null)
                {
                    OnRebuildCacheComplete();
                }
            }
        }
Exemplo n.º 4
0
        private void LoadData()
        {
            if (OnLoadDataStart != null)
            {
                OnLoadDataStart();
            }

            try
            {
                ClearList();
                var databaseMap = FiasDatabaseMap.LoadFromFile(RootFolder + "\\Fias.Mapping.xml");
                using (var transaction = connection.BeginTransaction())
                {
                    var dataFolder = RootFolder + "\\Data\\";
                    foreach (var dateFolder in Directory.GetDirectories(dataFolder).OrderBy(a => a))
                    {
                        var extractedFolder = dateFolder + "\\Extracted\\";
                        if (!Directory.Exists(extractedFolder))
                        {
                            continue;
                        }
                        foreach (var xmlFileName in Directory.GetFiles(extractedFolder))
                        {
                            var fInfo = new FiasFileInfo
                            {
                                Description = Path.GetFileName(dateFolder),
                                FileName    = xmlFileName
                            };
                            var fileName = Path.GetFileName(xmlFileName);
                            var dtImport = DbData.GetFieldValue(connection, transaction, string.Format("select DT_IMPORT from FIAS_IMPORT_HISTORY where name = '{0}';", fileName));
                            if (dtImport == null || dtImport is DBNull)
                            {
                                var c       = 0;
                                var updated = DbData.GetFieldValue(connection, transaction, string.Format("select LAST_COMMIT_COUNT from FIAS_IMPORT_HISTORY where name = '{0}';", fileName));
                                if (!(updated == null || updated is DBNull))
                                {
                                    c = Convert.ToInt32(updated);
                                }
                                fInfo.StatusPos = c;
                                fInfo.Status    = c == 0 ? string.Format("Пусто") : string.Format("Загружено записей {0}", c);
                                fInfo.IsExists  = false;
                            }
                            else
                            {
                                fInfo.Url      = dtImport.ToString();
                                fInfo.Status   = "Полностью загружен";
                                fInfo.IsExists = true;
                            }

                            var tableMap = databaseMap.Tables.FirstOrDefault(a =>
                            {
                                var name = Path.GetFileName(fInfo.FileName);
                                return(name != null && name.StartsWith(a.XmlDescription));
                            });
                            fInfo.Length  = tableMap == null ? 0 : tableMap.OrderNum;
                            fInfo.Checked = tableMap != null;
                            AddListItem(fInfo);
                        }
                    }
                }
            }
            finally
            {
                if (OnLoadDataComplete != null)
                {
                    OnLoadDataComplete();
                }
            }
        }