//Сохранение старого файла истории и добавление нового public void UpdateHistory(bool openAfterUpdate) { try { if (LastHistoryId > 300000) { _reasonUpdate = "Старый файл истории содержит более 300000 записей"; } if (_reasonUpdate != null && HistoryIsStable) { CloseHistory(); Thread.Sleep(1500); DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.Always, true); Thread.Sleep(1500); if (openAfterUpdate) { OpenHistoryRecs(); } } } catch (Exception ex) { AddErrorAboutHistory(ex); } }
//Открытие рекордсетов истории и добавление в историю первой записи после создания private void OpenHistoryRecs() { HistoryIsStable = false; HistoryDb = new DaoDb(_historyFile); History = new RecDao(HistoryDb, "History"); SuperHistory = new RecDao(HistoryDb, "SuperHistory"); if (_useSubHistory) { SubHistory = new RecDao(HistoryDb, "SubHistory"); } if (_useErrorsList) { ErrorsRec = new RecDao(HistoryDb, "ErrorsList"); } if (_reasonUpdate != null) { SubHistoryId = 0; try { StartLog("Создание нового файла истории", _reasonUpdate).Dispose(); _reasonUpdate = null; } catch (Exception ex) { AddErrorAboutHistory(ex); } LastHistoryId = 0; } }
//Задание файла истории public AccessHistory(Logger logger, //логгер string historyFile, //файл истории string historyTemplate) //шаблон для файла истории { try { Logger = logger; _historyFile = historyFile; _historyTemplate = historyTemplate; if (_historyFile != null) { if (_historyTemplate != null && DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.IfNewVersion, true)) { _updateReason = "Новая версия файла истории"; } OpenHistoryRecs(); } } catch (OutOfMemoryException) { } catch (Exception ex) { AddErrorAboutHistory(ex); } }
public SysTabl(string dbFile, //dbFile - файл базы данных bool useSubTabl = true) //useSubTabl - использовать SysSubTabl { _db = new DaoDb(dbFile); _useDb = false; OpenTables(useSubTabl); }
//Сохранение старого файла истории и добавление нового public void UpdateHistory() { try { if (_historyId > 300000) { _updateReason = "Старый файл истории содержит более 300000 записей"; _historyId = 0; } if (_updateReason != null) { Close(); Thread.Sleep(1500); DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.Always, true); Thread.Sleep(1500); OpenHistoryRecs(); } } catch (OutOfMemoryException) { } catch (Exception ex) { AddErrorAboutHistory(ex); } }
//Закрывает историю public void Close() { try { if (_subHistory != null) { _subHistory.Dispose(); } if (_history != null) { _history.Dispose(); } if (_superHistory != null) { _superHistory.Dispose(); } if (_errorsRec != null) { _errorsRec.Dispose(); } if (HistoryDb != null) { HistoryDb.Dispose(); } _subHistory = null; _history = null; _superHistory = null; _errorsRec = null; HistoryDb = null; } catch { } }
public SysTabl(DaoDb db, // db - соединение с базой данных bool useSubTabl = true) //useSubTabl - использовать SysSubTabl { _db = db; _useDb = true; OpenTables(useSubTabl); }
//db - база Access, stSql - запрос public ReaderAdo(DaoDb db, string stSql) { _useDb = true; DatabaseType = DatabaseType.Access; DaoDb = db.ConnectAdo(); OpenReader(stSql, db.Connection); }
//Метод выдает список индексов данной таблицы или сообщает о том, есть ли в ней данный индекс public bool RunOverIndexList(string dbFile, string table, string index = "") { try { string indexesS = ""; bool fieldFinded = false; using (var db = new DaoDb(dbFile)) { db.ConnectDao(); foreach (Index ind in db.Database.TableDefs[table].Indexes) { indexesS += ind.Name + "\n"; if (ind.Name == index) { fieldFinded = true; } } } if (index == "") { MessageBox.Show(indexesS); } else { return(fieldFinded); } return(false); } catch (Exception) { return(false); } }
public AdoReader(DaoDb db, //база Access string stSql) //запрос { _useDb = true; DatabaseType = DatabaseType.Access; DaoDb = db.ConnectAdo(); OpenReader(stSql, db.Connection); }
//db - файл accdb, stSql - запрос public ReaderAdo(string db, string stSql) { _useDb = false; DatabaseType = DatabaseType.Access; if (stSql.IsEmpty() || db.IsEmpty()) { throw new NullReferenceException("Путь к файлу базы данных не может быть пустой строкой или null"); } DaoDb = new DaoDb(db).ConnectAdo(); OpenReader(stSql, DaoDb.Connection); }
//Сохранение объектов из словаря в таблицу //Старые записи удаляются, только если их нет в словаре, иначе просто обновляются public static void SaveDicToTable <T>(string dbFile, //dbFile - файл базы данных DicS <T> dic, //Словарь string tabl, //Имя таблицы string keyField = "Code", //keyField - ключевое поле string keyField2 = "", //если ключ по двум полям, то второе ключевое поле string delField = "Del") //delField - поле отметки для удаления, where T : ISaveToRecDao { using (var db = new DaoDb(dbFile)) db.SaveDicToTable(dic, tabl, keyField, keyField2, delField); }
//Проверяет, что файл file является файлом типа fileType (в SysSubTab параметр FileOptions\FileType) //Также производится проверка на содержание в файле списка указанных таблиц tables //Возвращает true, если проверка прошла удачно public static bool Check(string file, string fileType, IEnumerable <string> tables = null) { try { if (file.IsEmpty() || !new FileInfo(file).Exists) { return(false); } if (!fileType.IsEmpty()) { using (var daodb = new DaoDb(file)) using (var sys = new SysTabl(daodb)) if (sys.SubValue("FileOptions", "FileType") != fileType) { return(false); } } var en = new DBEngine(); var db = en.OpenDatabase(file); try { var missing = new SortedSet <string>(); if (tables != null) { foreach (var table in tables) { missing.Add(table); } foreach (var t in db.TableDefs) { string s = ((TableDef)t).Name; if (missing.Contains(s)) { missing.Remove(s); } } } return(missing.Count == 0); } finally { try { try { db.Close(); } catch { } db = null; en = null; GC.Collect(); } catch { } } } catch { return(false); } }
//Закрытие public void Dispose() { try { if (_isEdit) { Recordset.Update(); } } catch { } try { Recordset.Close(); Recordset = null; } catch { } if (!_useDb) { DaoDb.Dispose(); } }
//Закрытие рекордсета, полная очистка ресурсов public void Dispose() { try { Command.Dispose(); } catch { } try { Reader.Close(); Reader.Dispose(); } catch { } try { if (DatabaseType == DatabaseType.SqlServer) { _connection.Close(); } } catch { } if (!_useDb && DatabaseType == DatabaseType.Access) { DaoDb.Dispose(); } }
//Открытие рекордсетов истории и добавление в историю первой записи после создания private void OpenHistoryRecs() { HistoryDb = new DaoDb(_historyFile); _subHistory = new DaoRec(HistoryDb, "SubHistory"); _history = new DaoRec(HistoryDb, "History"); _superHistory = new DaoRec(HistoryDb, "SuperHistory"); _errorsRec = new DaoRec(HistoryDb, "ErrorsList"); if (_updateReason != null) { try { Logger.StartLog(0, 0, "Создание нового файла истории", _updateReason).Finish(); _updateReason = null; } catch (OutOfMemoryException) { } catch (Exception ex) { AddErrorAboutHistory(ex); } _historyId = 0; } }
//Задание файла истории historyFile и файла его шаблона historyTemplate, открытие истории, useSubHistory - использовать SubHistory public void OpenHistory(string historyFile = null, string historyTemplate = null, bool useSubHistory = false, bool useErrorsList = true) { try { _historyFile = historyFile; _historyTemplate = historyTemplate; _useSubHistory = useSubHistory; _useErrorsList = useErrorsList; if (_historyFile != null) { if (_historyTemplate != null && DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.IfNewVersion, true)) { _reasonUpdate = "Новая версия файла истории"; } OpenHistoryRecs(); } } catch (Exception ex) { AddErrorAboutHistory(ex); } }
//Запуск открытия файла private string RunOpenFile(string initial) { var op = new OpenFileDialog { AddExtension = true, CheckFileExists = true, DefaultExt = Extension, Multiselect = false, Title = DialogTitle, Filter = DialogFilter }; op.ShowDialog(); if (op.FileName.IsEmpty()) { return(initial); } if (FileTables != null && !DaoDb.Check(op.FileName, FileTables)) { Different.MessageError(ErrorMessage, op.FileName); return(initial); } return(op.FileName); }
//Открывает рекордсет, при закрытии база данных будет закрыта public DaoRec(string file, string stSql, object type = null, object options = null, object lockEdit = null) { _useDb = false; DaoDb = new DaoDb(file).ConnectDao(); Open(DaoDb.Database, stSql, type, options, lockEdit); }
//Сохранение объектов из словаря dic в таблицу tabl, keyField - ключевое поле, если ключ по двум полям, то keyField2 - второе ключевое поле //delField - поле отметки для удаления, dbFile - файл базы данных //Старые записи удаляются, только если их нет в словаре, иначе просто обновляются public static void SaveDicToTable <T>(string dbFile, DicS <T> dic, string tabl, string keyField = "Code", string keyField2 = "", string delField = "Del") where T : ISaveToRecDao { using (var db = new DaoDb(dbFile)) db.SaveDicToTable(dic, tabl, keyField, keyField2, delField); }
// db - соединение с базой данных, useSubTabl - использовать SysSubTabl public SysTabl(DaoDb db, bool useSubTabl = true) { _db = db; _useDb = true; OpenTables(useSubTabl); }
//dbFile - файл базы данных, useSubTabl - использовать SysSubTabl public SysTabl(string dbFile, bool useSubTabl = true) { _db = new DaoDb(dbFile); _useDb = false; OpenTables(useSubTabl); }
//Открывает рекордсет, при закрытии база данных не будет закрыта public DaoRec(DaoDb daodb, string stSql, object type = null, object options = null, object lockEdit = null) { _useDb = true; DaoDb = daodb.ConnectDao(); Open(daodb.Database, stSql, type, options, lockEdit); }