diff --git a/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs b/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs index 8d7b6e73..b7a0ead5 100644 --- a/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs +++ b/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs @@ -86,8 +86,8 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource public KustoDataSource(string connectionString, string azureAccountToken) { ClusterName = GetClusterName(connectionString); - DatabaseName = GetDatabaseName(connectionString); UserToken = azureAccountToken; + DatabaseName = GetDatabaseName(connectionString); SchemaState = Task.Run(() => KustoIntellisenseHelper.AddOrUpdateDatabaseAsync(this, GlobalState.Default, DatabaseName, ClusterName, throwOnError: false)).Result; @@ -117,14 +117,31 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource } /// - /// Extracts the database name from the connectionstring, if it exists - /// - /// A connection string coming over the Data management protocol - private static string GetDatabaseName(string connectionString) + /// Extracts the database name from the connectionString if it exists + /// otherwise it takes the first database name from the server + /// + /// + /// Database Name + private string GetDatabaseName(string connectionString) { var csb = new SqlConnectionStringBuilder(connectionString); - return csb.InitialCatalog; + if (!string.IsNullOrWhiteSpace(csb.InitialCatalog)) + { + return csb.InitialCatalog; + } + + CancellationTokenSource source = new CancellationTokenSource(); + CancellationToken token = source.Token; + + string query = ".show databases | project DatabaseName"; + + using (var reader = ExecuteQuery(query, token)) + { + var rows = reader.ToEnumerable(); + var row = rows?.FirstOrDefault(); + return row?[0].ToString() ?? string.Empty; + } } ///