Ejemplo n.º 1
0
        private async Task <TestConnectionData> TestConnectionAsync(string connectionString, string providerName, string name)
        {
            TestConnectionData data = new TestConnectionData();

            data.ConnectionString = connectionString;
            data.Name             = name;
            if (providerName.Equals("System.Data.EntityClient", StringComparison.OrdinalIgnoreCase) || connectionString.StartsWith("metadata=res://", StringComparison.OrdinalIgnoreCase))
            {
                data.IsEntityFramework = true;
                var ec = new EntityConnectionStringBuilder(connectionString);
                connectionString = ec.ProviderConnectionString;
                providerName     = ec.Provider;
            }
            try
            {
                using (var connection = CreateDbConnection(providerName, connectionString))
                {
                    if (connection != null)
                    {
                        await connection.OpenAsync();

                        data.Succeeded = true;
                    }
                }
            }
            catch (Exception exception)
            {
                data.ExceptionDetails = exception;
            }
            return(data);
        }
Ejemplo n.º 2
0
        private async Task <TestConnectionData> TestConnectionAsync(string connectionString, string name, DatabaseType databaseType = DatabaseType.Dynamic)
        {
            TestConnectionData data = new TestConnectionData();

            data.ConnectionString = connectionString;
            data.Name             = name;
            CloudStorageAccount csa = null;

            try
            {
                if (databaseType == DatabaseType.SqlDatabase || databaseType == DatabaseType.SqlServer)
                {
                    using (SqlConnection conn = new SqlConnection())
                    {
                        conn.ConnectionString = connectionString;
                        await conn.OpenAsync();

                        data.Succeeded = true;
                    }
                }
                else if (databaseType == DatabaseType.MySql)
                {
                    using (MySqlConnection conn = new MySqlConnection())
                    {
                        conn.ConnectionString = connectionString;
                        await conn.OpenAsync();

                        data.Succeeded = true;
                    }
                }
                else if (databaseType == DatabaseType.PostgreSql)
                {
                    using (NpgsqlConnection conn = new NpgsqlConnection())
                    {
                        conn.ConnectionString = connectionString;
                        await conn.OpenAsync();

                        data.Succeeded = true;
                    }
                }
                else if (databaseType == DatabaseType.RedisCache)
                {
                    using (var muxer = await ConnectionMultiplexer.ConnectAsync(connectionString))
                    {
                        data.Succeeded = true;
                    }
                }
                else if (databaseType == DatabaseType.Dynamic)
                {
                    using (SqlConnection conn = new SqlConnection())
                    {
                        conn.ConnectionString = connectionString;
                        await conn.OpenAsync();

                        data.Succeeded = true;
                    }
                }
                else if (databaseType == DatabaseType.NotSupported)
                {
                    throw new Exception("This type of connection string is not yet supported by this tool");
                }

                else if (databaseType == DatabaseType.Custom)
                {
                    if (connectionString.StartsWith("metadata=res://", StringComparison.OrdinalIgnoreCase))
                    {
                        data.IsEntityFramework = true;
                        var ec = new EntityConnectionStringBuilder(connectionString);
                        using (var connection = CreateDbConnection(ec.Provider, ec.ProviderConnectionString))
                        {
                            if (connection != null)
                            {
                                await connection.OpenAsync();

                                data.Succeeded = true;
                            }
                        }
                    }
                    else if (connectionString.IndexOf("Driver=", StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        data.IsCustomDriver = true;
                        using (OdbcConnection conn = new OdbcConnection())
                        {
                            conn.ConnectionString = connectionString;
                            await conn.OpenAsync();

                            data.Succeeded = true;
                        }
                    }
                    else if (CloudStorageAccount.TryParse(connectionString, out csa))
                    {
                        data.IsAzureStorage = true;
                        var cloudTableClient = csa.CreateCloudTableClient();
                        var tableNames       = await cloudTableClient.ListTablesSegmentedAsync(null);

                        data.Succeeded = true;
                    }
                    else
                    {
                        throw new Exception("Failed to determine the kind of connection string");
                    }
                }
            }
            catch (Exception exception)
            {
                data.ExceptionDetails = exception;
            }
            return(data);
        }