/// <summary> /// Конструктор базы данных с указанием соединения, опции автосоздания структуры данных и пути файла для записи скрипта /// </summary> /// <param name="connection">Соединение с базой данных</param> /// <param name="autoCreateOption">Опция автосоздания структуры данных</param> /// <param name="scriptPath">Путь файла для записи изменений структуры в скрипт</param> /// <param name="updateOptions">Опции обновления структуры данных</param> /// <param name="insensitive">Регистронезависимость условий</param> /// <param name="indexTablespace">Табличное пространство для индексов</param> public OracleConnectionProviderEx(IDbConnection connection, AutoCreateOption autoCreateOption, string scriptPath, UpdateSchemaOptions updateOptions = UpdateSchemaOptions.Default, bool? insensitive = null, string indexTablespace = null) : base(connection, autoCreateOption) { this.scriptMode = !string.IsNullOrEmpty(scriptPath); this.scriptPath = scriptPath; this.updateOptions = updateOptions; this.insensitive = insensitive; this.indexTablespace = indexTablespace; OnOpenConnection(); }
/// <summary> /// Создает поставщика данных на основе строки соединения /// </summary> /// <param name="connectionString">Строка соединения с поставщиком данных</param> /// <param name="autoCreateOption">Опция автосоздания структуры базы данных</param> /// <param name="objectsToDisposeOnDisconnect">Объекты, требующие удаления после отключения соединения</param> /// <returns>Экземпляр поставщика данных OracleConnectionProviderEx</returns> public static new IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect) { // Файл для записи скрипта string scriptPath = null; UpdateSchemaOptions updateOptions = UpdateSchemaOptions.Default; bool? insensitive = null; string indexTablespace = null; ConnectionStringParser parser = new ConnectionStringParser(connectionString); if (parser.PartExists(ScriptParameterName)) { scriptPath = parser.GetPartByName(ScriptParameterName); parser.RemovePartByName(ScriptParameterName); connectionString = parser.GetConnectionString(); } // Опции обновления if (parser.PartExists(UpdateOptionsParameterName)) { updateOptions = (UpdateSchemaOptions)Convert.ToInt32(parser.GetPartByName(UpdateOptionsParameterName)); parser.RemovePartByName(UpdateOptionsParameterName); connectionString = parser.GetConnectionString(); } // Регистронезависимость в условиях if (parser.PartExists(InsesnsitiveParameterName)) { insensitive = Convert.ToBoolean(parser.GetPartByName(InsesnsitiveParameterName)); parser.RemovePartByName(InsesnsitiveParameterName); connectionString = parser.GetConnectionString(); } // Табличное пространство для индексов if (parser.PartExists(IndexTablespaceParameterName)) { indexTablespace = parser.GetPartByName(IndexTablespaceParameterName); parser.RemovePartByName(IndexTablespaceParameterName); connectionString = parser.GetConnectionString(); } // Соединение IDbConnection connection = CreateConnection(connectionString); objectsToDisposeOnDisconnect = new IDisposable[] { connection }; return scriptPath == null && updateOptions == UpdateSchemaOptions.Default && !insensitive.HasValue && indexTablespace == null ? CreateProviderFromConnection(connection, autoCreateOption) : new OracleConnectionProviderEx(connection, autoCreateOption, scriptPath, updateOptions, insensitive, indexTablespace); }
/// <summary> /// Конструктор базы данных с указанием соединения, опции автосоздания структуры данных и потока для записи скрипта /// </summary> /// <param name="connection">Соединение с базой данных</param> /// <param name="autoCreateOption">Опция автосоздания структуры данных</param> /// <param name="scriptWriter">Поток для записи изменений структуры в скрипт</param> /// <param name="updateOptions">Опции обновления структуры данных</param> /// <param name="insensitive">Регистронезависимость условий</param> /// <param name="indexTablespace">Табличное пространство для индексов</param> public OracleConnectionProviderEx(IDbConnection connection, AutoCreateOption autoCreateOption, StreamWriter scriptWriter, UpdateSchemaOptions updateOptions = UpdateSchemaOptions.Default, bool? insensitive = null, string indexTablespace = null) : base(connection, autoCreateOption) { this.scriptMode = scriptWriter != null; this.scriptWriter = scriptWriter; this.updateOptions = updateOptions; this.insensitive = insensitive; this.indexTablespace = indexTablespace; OnOpenConnection(); }