/// <summary>
        ///     Sprawdź, czy wartość występuje w podanej liści argumentów rozdzielonych separatorem ',', ';'
        ///     Sprawdź, czy wartość ceny w podanej liści argumentów rozdzielonych separatorem ',', ';'
        /// </summary>
        /// <param name="value">
        ///     Przekazana wartość jako object
        ///     /// Value passed as object
        /// </param>
        /// <param name="validationContext">
        ///     Kontekst klasy nadrzędnej jako ValidationContext
        ///     The context of the parent class as ValidationContext
        /// </param>
        /// <returns>
        ///     Rezultat walidacji jako ValidationResult
        ///     Validation result as ValidationResult
        /// </returns>
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (null != validationContext)
            {
                SetValidationContext(validationContext);
            }

            if (null != value && CheckForConnection)
            {
                value = ConnectionSettings ?? value;
                SqlConnection sqlConnection = null;
                try
                {
                    using (sqlConnection = new SqlConnection(DatabaseMssql.ParseConnectionString((string)value)))
                    {
                        sqlConnection.Open();
                        return(ValidationResult.Success);
                    }
                }
                catch (Exception e)
                {
                    Exception = string.Format("{0}, {1}.", e.Message, e.StackTrace);
                    log4net.Error(Exception, e);
                }
                finally
                {
                    try
                    {
                        if (null != sqlConnection)
                        {
                            sqlConnection.Close();
                        }
                    }
                    catch (Exception e)
                    {
                        Exception = string.Format("{0}, {1}.", e.Message, e.StackTrace);
                        log4net.Error(Exception, e);
                    }
                }

                if (null != ErrorMessage)
                {
                    return(new ValidationResult(string.Format(ErrorMessage, value)));
                }

                return(new ValidationResult(string.Format(
                                                "Nie można utworzyć połączenia do bazy danych Mssql używając danych: {0} {1}", value, Exception)));
            }

            return(ValidationResult.Success);
        }
        public virtual string GetConnectionString()
        {
            var connectionString = string.Empty;

            try
            {
                if (!string.IsNullOrWhiteSpace(ConnectionString))
                {
                    connectionString = AesIVProviderService.Decpypt(ConnectionString,
                                                                    RsaProviderService.AsymmetricPublicKeyAsString);
                    connectionString = RsaProviderService.DecryptWithPublicKey(connectionString);
                    connectionString = DatabaseMssql.ParseConnectionString(connectionString);
                }
            }
            catch (Exception e)
            {
                _log4Net.Error(
                    $"\n{e.GetType()}\n{e.InnerException?.GetType()}\n{e.Message}\n{e.StackTrace}\n", e);
            }

            return(connectionString);
        }
        public virtual string GetCreateScript(string connectionString     = null, string connectionStringName = null,
                                              string settingsJsonFileName = null)
        {
            try
            {
                ConnectionStringName = connectionStringName;
                SettingsJsonFileName = settingsJsonFileName;
                ConnectionString     = connectionString ??
                                       DatabaseMssql.GetConnectionString(ConnectionStringName, SettingsJsonFileName);
                if (null != ConnectionString)
                {
                    var sqlConnectionStringBuilder = new SqlConnectionStringBuilder(ConnectionString);
                    AttachDBFilename = sqlConnectionStringBuilder.AttachDBFilename;
                    if (null != AttachDBFilename && !string.IsNullOrWhiteSpace(AttachDBFilename))
                    {
                        InitialCatalog = sqlConnectionStringBuilder.InitialCatalog;
                        LogAttachDBFilename ??= Path.Combine(Path.GetDirectoryName(AttachDBFilename),
                                                             string.Format("{0}_log.ldf",
                                                                           Path.GetFileName(AttachDBFilename)
                                                                           .Replace(Path.GetExtension(Path.GetFileName(AttachDBFilename)), string.Empty)));
                        LogInitialCatalog ??= string.Format("{0}_log", InitialCatalog);
                        if (
                            null != sqlConnectionStringBuilder &&
                            null != AttachDBFilename && !string.IsNullOrWhiteSpace(AttachDBFilename) &&
                            !File.Exists(AttachDBFilename) &&
                            null != InitialCatalog && !string.IsNullOrWhiteSpace(InitialCatalog) &&
                            null != LogAttachDBFilename && !string.IsNullOrWhiteSpace(LogAttachDBFilename) &&
                            null != LogInitialCatalog && !string.IsNullOrWhiteSpace(LogInitialCatalog)
                            )
                        {
                            var mdfCreateDatabaseScriptPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                                                           "scripts", "Db", "Mssql", "MdfCreateDatabaseScript.sql");
                            if (File.Exists(mdfCreateDatabaseScriptPath))
                            {
                                CreateScript = File.ReadAllText(mdfCreateDatabaseScriptPath)
                                               .Replace("%InitialCatalog%", InitialCatalog)
                                               .Replace("%AttachDBFilename%", AttachDBFilename)
                                               .Replace("%Size%", Size ?? "8MB")
                                               .Replace("%MaxSize%", MaxSize ?? "131072MB")
                                               .Replace("%FileGrowTh%", FileGrowTh ?? "1 %")
                                               .Replace("%LogInitialCatalog%", LogInitialCatalog)
                                               .Replace("%LogAttachDBFilename%", LogAttachDBFilename)
                                               .Replace("%LogSize%", LogSize ?? "8MB")
                                               .Replace("%LogMaxSize%", LogMaxSize ?? "8192MB")
                                               .Replace("%LogFileGrowTh%", LogFileGrowTh ?? "1 %")
                                ;
                            }
#if DEBUG
                            _log4Net.Debug($"CreateScript{Environment.NewLine}{CreateScript}{Environment.NewLine}");
#endif
                            return(CreateScript);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                _log4Net.Error(
                    string.Format("\n{0}\n{1}\n{2}\n{3}\n", e.GetType(), e.InnerException?.GetType(), e.Message,
                                  e.StackTrace), e);
            }

            return(null);
        }