From bc824ba66aa5e1785f6d76c0ccb5a18155bc2ec4 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 20 Feb 2013 15:55:39 -0100 Subject: [PATCH] Updates for WebPI testers: Check if SQL CE file exists when connectionstring is filled in, make sure the connection string exists in web.config and if it has empty values, run the installer instead of trying to start the site. Also never claim the database is configure when the providername is empty. --- src/Umbraco.Core/DatabaseContext.cs | 3 +- src/Umbraco.Web.UI/web.Template.config | 6 +++- .../install/steps/database.ascx.cs | 31 ++++++++++--------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs index 597e4de24e..0acf98f842 100644 --- a/src/Umbraco.Core/DatabaseContext.cs +++ b/src/Umbraco.Core/DatabaseContext.cs @@ -278,7 +278,8 @@ namespace Umbraco.Core /// internal void Initialize() { - if (ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName] != null) + var databaseSettings = ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName]; + if (databaseSettings != null && string.IsNullOrWhiteSpace(databaseSettings.ConnectionString) == false && string.IsNullOrWhiteSpace(databaseSettings.ProviderName) == false) { var providerName = "System.Data.SqlClient"; if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName].ProviderName)) diff --git a/src/Umbraco.Web.UI/web.Template.config b/src/Umbraco.Web.UI/web.Template.config index d83c0e0cef..4702427a8f 100644 --- a/src/Umbraco.Web.UI/web.Template.config +++ b/src/Umbraco.Web.UI/web.Template.config @@ -79,7 +79,11 @@ - + + + + + diff --git a/src/Umbraco.Web/umbraco.presentation/install/steps/database.ascx.cs b/src/Umbraco.Web/umbraco.presentation/install/steps/database.ascx.cs index 8a57ad3b92..7d88678b05 100644 --- a/src/Umbraco.Web/umbraco.presentation/install/steps/database.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/install/steps/database.ascx.cs @@ -73,13 +73,17 @@ namespace umbraco.presentation.install.steps if (settings.Visible && !Page.IsPostBack) { //If the connection string is already present in web.config we don't need to show the settings page and we jump to installing/upgrading. - if ( - ConfigurationManager.ConnectionStrings[ - Umbraco.Core.Configuration.GlobalSettings.UmbracoConnectionName] == null - || - string.IsNullOrEmpty( - ConfigurationManager.ConnectionStrings[ - Umbraco.Core.Configuration.GlobalSettings.UmbracoConnectionName].ConnectionString)) + var databaseSettings = ConfigurationManager.ConnectionStrings[Umbraco.Core.Configuration.GlobalSettings.UmbracoConnectionName]; + + var dbIsSqlCe = databaseSettings.ProviderName == "System.Data.SqlServerCe.4.0"; + var sqlCeDatabaseExists = false; + if (dbIsSqlCe) + sqlCeDatabaseExists = File.Exists(databaseSettings.ConnectionString.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())); + + // Either the connection details are not fully specified or it's a SQL CE database that doesn't exist yet + if (databaseSettings == null + || string.IsNullOrWhiteSpace(databaseSettings.ConnectionString) || string.IsNullOrWhiteSpace(databaseSettings.ProviderName) + || (dbIsSqlCe && sqlCeDatabaseExists == false)) { installProgress.Visible = true; upgradeProgress.Visible = false; @@ -115,20 +119,20 @@ namespace umbraco.presentation.install.steps protected void ShowDatabaseSettings() { // Parse the connection string - DbConnectionStringBuilder connectionStringBuilder = new DbConnectionStringBuilder(); + var connectionStringBuilder = new DbConnectionStringBuilder(); var databaseSettings = ConfigurationManager.ConnectionStrings[Umbraco.Core.Configuration.GlobalSettings.UmbracoConnectionName]; - if (databaseSettings != null) + if (databaseSettings != null && string.IsNullOrWhiteSpace(databaseSettings.ConnectionString) == false) { var dataHelper = DataLayerHelper.CreateSqlHelper(databaseSettings.ConnectionString, false); connectionStringBuilder.ConnectionString = dataHelper.ConnectionString; // Prepare data layer type - string datalayerType = GetConnectionStringValue(connectionStringBuilder, "datalayer"); + var datalayerType = GetConnectionStringValue(connectionStringBuilder, "datalayer"); if (datalayerType.Length > 0) { foreach (ListItem item in DatabaseType.Items) - if (item.Value != String.Empty && datalayerType.Contains(item.Value)) + if (item.Value != string.Empty && datalayerType.Contains(item.Value)) DatabaseType.SelectedValue = item.Value; } else if (dataHelper.ConnectionString != "server=.\\SQLEXPRESS;database=DATABASE;user id=USER;password=PASS") @@ -138,7 +142,7 @@ namespace umbraco.presentation.install.steps { DatabaseType.SelectedValue = "SqlServer"; } - + DatabaseType_SelectedIndexChanged(this, new EventArgs()); // Prepare other fields @@ -154,8 +158,7 @@ namespace umbraco.presentation.install.steps toggleVisible(DatabaseUsernameItem, !ManualConnectionString && !IsEmbeddedDatabase); toggleVisible(DatabasePasswordItem, !ManualConnectionString && !IsEmbeddedDatabase); toggleVisible(DatabaseNameItem, !ManualConnectionString && !IsEmbeddedDatabase); - - + if (IsEmbeddedDatabase) dbinit.Text = "$('#databaseOptionEmbedded').click();$('#databaseOptionEmbedded').change();"; else if (ManualConnectionString)