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); }
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); }