Alphashack.Graphdat.Agent.SqlTrace.SqlTraceManager.GetDatabases C# (CSharp) Method

GetDatabases() private static method

private static GetDatabases ( ) : DatabaseInfo>.Dictionary
return DatabaseInfo>.Dictionary
        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;
        }