public override void PopulateDatabases(IDatasource datasource)
        {
            DatabaseObjectsCollection <IDatabase> databases = new DatabaseObjectsCollection <IDatabase>(datasource);

            SqlConnection sqlConnection = null;

            sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString = datasource.ConnectionString;
            try
            {
                sqlConnection.Open();
            }
            catch (SqlException ex)
            {
                switch (ex.Number)
                {
                case 2:
                case 3:
                case 53:
                    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
                    {
                        Datasources.Remove(datasource as SQLServerDatasource);
                    }));
                    break;

                default:
                    break;
                }

                throw ex;
            }

            Version version = new Version(sqlConnection.ServerVersion);
            string  manifestToken;

            if (!IsVersionSupported(version, out manifestToken))
            {
                throw new NotSupportedException(string.Format("Version '{0}' is not supported!", version == null ? "unknown" : version.ToString()));
            }

            string sql = string.Empty;

            if (version.Major >= 9)
            {
                sql = "use master; select name from sys.databases order by name";
            }
            else
            {
                sql = "use master; select name from sysdatabases order by name";
            }

            SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);

            sqlCommand.CommandTimeout = 20;

            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

            while (sqlDataReader.Read())
            {
                databases.Add(new Database(datasource)
                {
                    Name = sqlDataReader["name"].ToString()
                });
            }

            sqlDataReader.Close();

            datasource.Databases = databases;

            if (sqlConnection != null && sqlConnection.State == ConnectionState.Open)
            {
                sqlConnection.Close();
            }
        }
        public override void PopulateDatabases(IDatasource datasource)
        {
            DatabaseObjectsCollection <IDatabase> databases = new DatabaseObjectsCollection <IDatabase>(datasource);

            SqlConnection sqlConnection = null;

            sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString = datasource.ConnectionString;

            try
            {
                sqlConnection.Open();
            }
            catch (SqlException ex)
            {
                switch (ex.Number)
                {
                case 2:
                case 3:
                case 53:
                    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
                    {
                        Datasources.Remove(datasource as SQLServerDatasource);
                    }));
                    break;

                default:
                    break;
                }

                throw ex;
            }

            string sqlversion = sqlConnection.ServerVersion;

            sqlversion = sqlversion.Split('.').FirstOrDefault(); //major version
            int    intsqlversion = Convert.ToInt32(sqlversion);
            string sql           = string.Empty;

            if (intsqlversion == 8)
            {
                datasource.ProviderManifestToken = "2000";
            }
            else if (intsqlversion == 9)
            {
                datasource.ProviderManifestToken = "2005";
            }
            else if (intsqlversion == 10)
            {
                datasource.ProviderManifestToken = "2008";
            }

            if (intsqlversion >= 9)
            {
                sql = "use master; select name from sys.databases order by name";
            }
            else
            {
                sql = "use master; select name from sysdatabases order by name";
            }

            SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);

            sqlCommand.CommandTimeout = 20;

            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

            while (sqlDataReader.Read())
            {
                databases.Add(new Database(datasource)
                {
                    Name = sqlDataReader["name"].ToString()
                });
            }

            sqlDataReader.Close();

            datasource.Databases = databases;

            if (sqlConnection != null && sqlConnection.State == ConnectionState.Open)
            {
                sqlConnection.Close();
            }
        }