public static SchemaExtendedReader Create(string connectionString, string providerName)
        {
            if (string.IsNullOrEmpty(providerName))
                throw new ArgumentNullException("providerName", "providerName must not be empty");

            SchemaExtendedReader schemaReader = null;
            var type = ProviderToSqlType.Convert(providerName);
            switch (type)
            {
                case SqlType.Oracle:
                    schemaReader = new OracleSchemaReader(connectionString, providerName);
                    break;
                case SqlType.SqlServer:
                    schemaReader = new SqlAzureOrSqlServerSchemaReader(connectionString, providerName);
                    break;
                case SqlType.SqlServerCe:
                    schemaReader = new SqlServerCeSchemaReader(connectionString, providerName);
                    break;
                case SqlType.MySql:
                    schemaReader = new MySqlSchemaReader(connectionString, providerName);
                    break;
                case SqlType.PostgreSql:
                    schemaReader = new PostgreSqlSchemaReader(connectionString, providerName);
                    break;
                case SqlType.Db2:
                    schemaReader = new Db2SchemaReader(connectionString, providerName);
                    break;
                default:
                    //all the other types
                    if (providerName.Equals("Ingres.Client", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new IngresSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("iAnyWhere.Data.SQLAnyWhere", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new SybaseAsaSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("Sybase.Data.AseClient", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new SybaseAseSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("iAnyWhere.Data.UltraLite", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new SybaseUltraLiteSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("System.Data.OleDb", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new OleDbSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("System.Data.VistaDB", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new VistaDbSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("IBM.Data.DB2.iSeries", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new Db2ISeriesSchemaReader(connectionString, providerName);
                    }
                    else if (providerName.Equals("FirebirdSql.Data.FirebirdClient", StringComparison.OrdinalIgnoreCase))
                    {
                        schemaReader = new FirebirdSqlSchemaReader(connectionString, providerName);
                    }

                    break;
            }
            if (schemaReader == null)
            {
                schemaReader = new SchemaExtendedReader(connectionString, providerName);
            }
            return schemaReader;
        }
        public static SchemaExtendedReader Create(string connectionString, string providerName)
        {
            if (string.IsNullOrEmpty(providerName))
            {
                throw new ArgumentNullException("providerName", "providerName must not be empty");
            }

            SchemaExtendedReader schemaReader = null;
            var type = ProviderToSqlType.Convert(providerName);

            switch (type)
            {
            case SqlType.Oracle:
                schemaReader = new OracleSchemaReader(connectionString, providerName);
                break;

            case SqlType.SqlServer:
                schemaReader = new SqlAzureOrSqlServerSchemaReader(connectionString, providerName);
                break;

            case SqlType.SqlServerCe:
                schemaReader = new SqlServerCeSchemaReader(connectionString, providerName);
                break;

            case SqlType.MySql:
                schemaReader = new MySqlSchemaReader(connectionString, providerName);
                break;

            case SqlType.PostgreSql:
                schemaReader = new PostgreSqlSchemaReader(connectionString, providerName);
                break;

            case SqlType.Db2:
                schemaReader = new Db2SchemaReader(connectionString, providerName);
                break;

            default:
                //all the other types
                if (providerName.Equals("Ingres.Client", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new IngresSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("iAnyWhere.Data.SQLAnyWhere", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new SybaseAsaSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("Sybase.Data.AseClient", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new SybaseAseSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("iAnyWhere.Data.UltraLite", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new SybaseUltraLiteSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("System.Data.OleDb", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new OleDbSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("System.Data.VistaDB", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new VistaDbSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("IBM.Data.DB2.iSeries", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new Db2ISeriesSchemaReader(connectionString, providerName);
                }
                else if (providerName.Equals("FirebirdSql.Data.FirebirdClient", StringComparison.OrdinalIgnoreCase))
                {
                    schemaReader = new FirebirdSqlSchemaReader(connectionString, providerName);
                }

                break;
            }
            if (schemaReader == null)
            {
                schemaReader = new SchemaExtendedReader(connectionString, providerName);
            }
            return(schemaReader);
        }