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(); }
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(); } }
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(); } } }
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(); } } }