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