public override  void Initialize(string name, NameValueCollection config){
            if (config == null)
               throw new ArgumentNullException("config");

            if (String.IsNullOrEmpty(name))
                name = "SqlRoleProvider";
            if (string.IsNullOrEmpty(config["description"])) {
                config.Remove("description");
                config.Add("description", StringResources.GetString(StringResources.RoleSqlProviderDescription));
            }
            base.Initialize(name, config);

            _commandTimeout = SecUtility.GetIntValue( config, "commandTimeout", 30, true, 0 );

            string temp = config["connectionStringName"];
            if (string.IsNullOrEmpty(temp))
                throw new ProviderException(StringResources.GetString(StringResources.ConnectionNameNotSpecified));
            _sqlConnectionString = SqlConnectionHelper.GetConnectionString(temp, true, true);
            if (string.IsNullOrEmpty(_sqlConnectionString)) {
                throw new ProviderException(StringResources.GetString(StringResources.ConnectionStringNotFound, temp));
            }

            SqlConnectionHolder holder = SqlConnectionHelper.GetConnection(_sqlConnectionString, true);
            _dataSource.Initialize(ApplicationName, holder, this, CommandTimeout);

            _schemaVersion = new SchemaVersion(_dataSource, this, holder.Connection);

            _appName = config["applicationName"];
            if (string.IsNullOrEmpty(_appName))
                _appName = SecUtility.GetDefaultAppName();

            if( _appName.Length > 256 )
            {
                throw new ProviderException(StringResources.GetString(StringResources.ProviderApplicationNameTooLong));
            }

            config.Remove("connectionStringName");
            config.Remove("applicationName");
            config.Remove("commandTimeout");
            if (config.Count > 0)
            {
                string attribUnrecognized = config.GetKey(0);
                if (!String.IsNullOrEmpty(attribUnrecognized))
                    throw new ProviderException(StringResources.GetString(StringResources.ProviderUnrecognizedAttribute, attribUnrecognized));
            }
        }
        private void ApplySettingsFromAppConfig(NameValueCollection config, string name)
        {
            if (string.IsNullOrEmpty(config["description"])) {
                config.Remove("description");
                config.Add("description", StringResources.GetString(StringResources.MembershipSqlProviderDescription));
            }
            base.Initialize(name, config);

            _enablePasswordRetrieval    = SecUtility.GetBooleanValue(config, "enablePasswordRetrieval", false);
            _enablePasswordReset        = SecUtility.GetBooleanValue(config, "enablePasswordReset", true);
            _requiresQuestionAndAnswer  = SecUtility.GetBooleanValue(config, "requiresQuestionAndAnswer", true);
            _requiresUniqueEmail        = SecUtility.GetBooleanValue(config, "requiresUniqueEmail", true);
            _maxInvalidPasswordAttempts = SecUtility.GetIntValue( config, "maxInvalidPasswordAttempts", 5, false, 0 );
            _passwordAttemptWindow      = SecUtility.GetIntValue( config, "passwordAttemptWindow", 10, false, 0 );
            _minRequiredPasswordLength  = SecUtility.GetIntValue( config, "minRequiredPasswordLength", 7, false, 128 );
            _minRequiredNonalphanumericCharacters = SecUtility.GetIntValue( config, "minRequiredNonalphanumericCharacters", 1, true, 128 );

            _passwordStrengthRegularExpression = config["passwordStrengthRegularExpression"];
            if( _passwordStrengthRegularExpression != null )
            {
                _passwordStrengthRegularExpression = _passwordStrengthRegularExpression.Trim();
                if( _passwordStrengthRegularExpression.Length != 0 )
                    DataProviderHelper.ValidateRegularExpression(_passwordStrengthRegularExpression);
            }
            else
                _passwordStrengthRegularExpression = string.Empty;

            if (_minRequiredNonalphanumericCharacters > _minRequiredPasswordLength)
                throw new HttpException(StringResources.GetString(StringResources.MinRequiredNonalphanumericCharactersCanNotBeMoreThanMinRequiredPasswordLength));

            _commandTimeout = SecUtility.GetIntValue( config, "commandTimeout", 30, true, 0 );
            _appName = config["applicationName"];
            if (string.IsNullOrEmpty(_appName))
                _appName = SecUtility.GetDefaultAppName();

            if( _appName.Length > 256 )
            {
                throw new ProviderException(StringResources.GetString(StringResources.ProviderApplicationNameTooLong));
            }

            string membershipPasswordFormatString = config["passwordFormat"] ?? "Hashed";
            _passwordFormat = DataProviderHelper.ConvertToMembershipPasswordFormat(membershipPasswordFormatString);

            if (PasswordFormat == MembershipPasswordFormat.Hashed && EnablePasswordRetrieval)
                throw new ProviderException(StringResources.GetString(StringResources.ProviderCanNotRetrieveHashedPassword));

            string connectionStringName = config["connectionStringName"];
            if (string.IsNullOrEmpty(connectionStringName))
                throw new ProviderException(StringResources.GetString(StringResources.ConnectionNameNotSpecified));
            _sqlConnectionString = SqlConnectionHelper.GetConnectionString(connectionStringName, true, true);
            if (string.IsNullOrEmpty(_sqlConnectionString)) {
                throw new ProviderException(StringResources.GetString(StringResources.ConnectionStringNotFound, connectionStringName));
            }

            SqlConnectionHolder holder = SqlConnectionHelper.GetConnection(_sqlConnectionString, true);

            _dataSource.Initialize(ApplicationName, holder, this, CommandTimeout);
            _schemaVersion = new SchemaVersion(_dataSource, this, holder.Connection);

            config.Remove("connectionStringName");
            config.Remove("enablePasswordRetrieval");
            config.Remove("enablePasswordReset");
            config.Remove("requiresQuestionAndAnswer");
            config.Remove("applicationName");
            config.Remove("requiresUniqueEmail");
            config.Remove("maxInvalidPasswordAttempts");
            config.Remove("passwordAttemptWindow");
            config.Remove("commandTimeout");
            config.Remove("passwordFormat");
            config.Remove("name");
            config.Remove("minRequiredPasswordLength");
            config.Remove("minRequiredNonalphanumericCharacters");
            config.Remove("passwordStrengthRegularExpression");
            if (config.Count > 0) {
                string attribUnrecognized = config.GetKey(0);
                if (!String.IsNullOrEmpty(attribUnrecognized))
                    throw new ProviderException(StringResources.GetString(StringResources.ProviderUnrecognizedAttribute, attribUnrecognized));
            }
        }