private static Dictionary<string, DatabaseInfo> GetDatabases() { var databases = new Dictionary<string, DatabaseInfo>(); foreach (ConnectionStringSettings connectionString in ConfigurationManager.ConnectionStrings) { ConnectionStringType connectionStringType; var name = connectionString.Name.Substring(connectionString.Name.LastIndexOf(".") + 1); if (name.StartsWith("database", StringComparison.InvariantCultureIgnoreCase)) { connectionStringType = ConnectionStringType.Database; } else if (name.StartsWith("instance", StringComparison.InvariantCultureIgnoreCase)) { connectionStringType = ConnectionStringType.Instance; } else { continue; } var builder = new SqlConnectionStringBuilder(connectionString.ConnectionString); var dataSource = builder.DataSource; var initialCatalog = builder.InitialCatalog; DatabaseInfo database; if (!databases.TryGetValue(dataSource, out database)) { database = new DatabaseInfo { DataSource = dataSource }; databases.Add(dataSource, database); } switch (connectionStringType) { case ConnectionStringType.Database: if (!database.Catalogs.Contains(initialCatalog)) database.Catalogs.Add(initialCatalog); break; case ConnectionStringType.Instance: database.InstanceConnectionString = connectionString.ConnectionString; break; default: break; } } var noCatalog = databases.Where(dbi => dbi.Value.Catalogs.Count == 0).ToList(); foreach (var database in noCatalog) { databases.Remove(database.Key); } return databases; }