diff --git a/src/Umbraco.Core/Configuration/ConfigConnectionString.cs b/src/Umbraco.Core/Configuration/ConfigConnectionString.cs index dab615da51..e88d1f4d01 100644 --- a/src/Umbraco.Core/Configuration/ConfigConnectionString.cs +++ b/src/Umbraco.Core/Configuration/ConfigConnectionString.cs @@ -17,48 +17,57 @@ namespace Umbraco.Cms.Core.Configuration public string ProviderName { get; } public string Name { get; } - private string ParseProvider(string connectionString) + private static bool IsSqlCe(DbConnectionStringBuilder builder) => (builder.TryGetValue("Data Source", out var ds) + || builder.TryGetValue("DataSource", out ds)) && + ds is string dataSource && + dataSource.EndsWith(".sdf"); + + private static bool IsSqlServer(DbConnectionStringBuilder builder) => + !string.IsNullOrEmpty(GetServer(builder)) && + ((builder.TryGetValue("Database", out var db) && db is string database && + !string.IsNullOrEmpty(database)) || + (builder.TryGetValue("AttachDbFileName", out var a) && a is string attachDbFileName && + !string.IsNullOrEmpty(attachDbFileName)) || + (builder.TryGetValue("Initial Catalog", out var i) && i is string initialCatalog && + !string.IsNullOrEmpty(initialCatalog))); + + private static string GetServer(DbConnectionStringBuilder builder) + { + if(builder.TryGetValue("Server", out var s) && s is string server) + { + return server; + } + + if ((builder.TryGetValue("Data Source", out var ds) + || builder.TryGetValue("DataSource", out ds)) && ds is string dataSource) + { + return dataSource; + } + + return ""; + } + + private static string ParseProvider(string connectionString) { if (string.IsNullOrEmpty(connectionString)) { return null; } - var builder = new DbConnectionStringBuilder + var builder = new DbConnectionStringBuilder {ConnectionString = connectionString}; + if (IsSqlCe(builder)) { - ConnectionString = connectionString - }; - - if ( - (builder.TryGetValue("Data Source", out var ds) - || builder.TryGetValue("DataSource", out ds)) && ds is string dataSource) - { - if (dataSource.EndsWith(".sdf")) - { - return Umbraco.Cms.Core.Constants.DbProviderNames.SqlCe; - } + return Constants.DbProviderNames.SqlCe; } - if (builder.TryGetValue("Server", out var s) && s is string server && !string.IsNullOrEmpty(server)) + if (IsSqlServer(builder)) { - if (builder.TryGetValue("Database", out var db) && db is string database && !string.IsNullOrEmpty(database)) - { - return Umbraco.Cms.Core.Constants.DbProviderNames.SqlServer; - } - - if (builder.TryGetValue("AttachDbFileName", out var a) && a is string attachDbFileName && !string.IsNullOrEmpty(attachDbFileName)) - { - return Umbraco.Cms.Core.Constants.DbProviderNames.SqlServer; - } - - if (builder.TryGetValue("Initial Catalog", out var i) && i is string initialCatalog && !string.IsNullOrEmpty(initialCatalog)) - { - return Umbraco.Cms.Core.Constants.DbProviderNames.SqlServer; - } + return Constants.DbProviderNames.SqlServer; } - throw new ArgumentException("Cannot determine provider name from connection string", nameof(connectionString)); + throw new ArgumentException("Cannot determine provider name from connection string", + nameof(connectionString)); } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs index 8d3d266515..c545c10c8f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Umbraco. +// Copyright (c) Umbraco. // See LICENSE for more details. using NUnit.Framework; @@ -15,6 +15,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Configuration.Models [TestCase(null, ExpectedResult = null)] [TestCase(@"Data Source=|DataDirectory|\Umbraco.sdf;Flush Interval=1;", ExpectedResult = Constants.DbProviderNames.SqlCe)] [TestCase(@"Server=(LocalDb)\Umbraco;Database=NetCore;Integrated Security=true", ExpectedResult = Constants.DbProviderNames.SqlServer)] + [TestCase(@"Data Source=(LocalDb)\Umbraco;Initial Catalog=NetCore;Integrated Security=true;", ExpectedResult = Constants.DbProviderNames.SqlServer)] + [TestCase(@"Data Source=.\SQLExpress;Integrated Security=true;AttachDbFilename=MyDataFile.mdf;", ExpectedResult = Constants.DbProviderNames.SqlServer)] public string ParseProviderName(string connectionString) { var connectionStrings = new ConnectionStrings