Example #1
0
 private void RunScripts(InstallerConfig config)
 {
     string[] files = Directory.GetFiles(config.Path.AppPath + config.Path.RelativeSqlPath);
     foreach (string file in files)
     {
         string[] statements = GetScriptStatements(File.ReadAllText(file, new System.Text.UTF8Encoding()));
         ExecuteStatements(statements, config);
     }
 }
Example #2
0
        public FactoryTests()
        {
            // You need to remember to remove the ".config" in the filename for it to work correctly.
            // The ConfigurationManager tacks on a trailing ".config" to the filename.
            // C:\VSProjects\MvcInstaller\RuleValidationFactory.Tests\bin\Debug\RuleValidationFactory.Tests.dll.config.config
            // So if the actual filename is "RuleValidationFactory.Tests.dll.config",
            // then you have to enter, RuleValidationFactory.Tests.dll for it to work.
            _configSection = ConfigurationManager.OpenExeConfiguration(AppDomain.CurrentDomain.BaseDirectory + @"\RuleValidationFactory.Tests.dll");

            _config = Serializer<InstallerConfig>.Deserialize(AppDomain.CurrentDomain.BaseDirectory + @"\installer.config");

            _factory = new RulesValidationFactory(_config, _configSection);
        }
        public void return_standard_connection_string_using_trustedconnection()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "BloggerApp";
            config.Database.UseTrustedConnection = true;

            ConnectionFactory factory = new ConnectionFactory(config);

            // Act
            var actual = factory.ConnectionString();
            var expected = string.Format("Data Source={0};Initial Catalog={1};Integrated Security=True", config.Database.DataSource, config.Database.InitialCatalog);

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void return_entityframework_connection_using_trustedconnection()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "BloggerApp";
            config.Database.UseTrustedConnection = true;
            config.Database.EntityFrameworkEntitiesName = "BloggerEntities";

            ConnectionFactory factory = new ConnectionFactory(config);

            // Act
            var actual = factory.ConnectionString();
            var expected = @"metadata=res://*/Models.BloggerEntities.csdl|res://*/Models.BloggerEntities.ssdl|res://*/Models.BloggerEntities.msl;provider=System.Data.SqlClient;provider connection string=""Data Source=kingwilder-pc\sqlserver;Initial Catalog=BloggerApp;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework""";

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void return_standard_connection_string_with_credentials()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "BloggerApp";
            config.Database.UseTrustedConnection = false;
            config.Database.UserName = "******";
            config.Database.Password = "******";

            ConnectionFactory factory = new ConnectionFactory(config);

            // Act
            var actual = factory.ConnectionString();
            var expected = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", config.Database.DataSource, config.Database.InitialCatalog, config.Database.UserName, config.Database.Password);

            // Assert
            Assert.AreEqual(expected, actual);
        }
Example #6
0
 /// <summary>
 /// This will execute the sql statements.
 /// </summary>
 /// <param name="tableStatements"></param>
 /// <param name="dbName"></param>
 private void ExecuteStatements(string[] tableStatements, InstallerConfig config)
 {
     if (tableStatements.Length > 0)
     {
         using (SqlConnection conn = new SqlConnection())
         {
             IConnectionStringComponent component = new ConnectionStringComponent(config);
             conn.ConnectionString = component.GetConnString();
             conn.Open();
             using (SqlCommand command = new SqlCommand(string.Empty, conn))
             {
                 foreach (string statement in tableStatements)
                 {
                     command.CommandText = statement;
                     command.ExecuteNonQuery();
                 }
             }
         }
     }
 }
        /// <summary>
        /// Update the web.config connection strings. If the EntityFramework is being used, two connection strings
        /// will be created. One for the EntityFramework, and another for the Membership system.
        /// </summary>
        /// <param name="config"></param>
        /// <param name="configSection"></param>
        private void UpdateConnectionString(InstallerConfig config, Configuration configSection)
        {
            string connString = component.GetConnString();
            string providerName = "System.Data.SqlClient";
            if (!string.IsNullOrEmpty(config.Database.EntityFrameworkEntitiesName))
            {
                providerName = "System.Data.EntityClient";
                connString = component.BuildEntityFrameworkConnectionString();
            }

            ConnectionStringsSection connectionStringsSection = configSection.ConnectionStrings;
            ConnectionStringSettings appTemplate = new ConnectionStringSettings(config.Database.ConnectionStringName, connString, providerName);
            connectionStringsSection.ConnectionStrings.Clear();
            connectionStringsSection.ConnectionStrings.Add(appTemplate);

            if (!string.IsNullOrEmpty(config.Database.EntityFrameworkEntitiesName) && config.Membership.Create)
            {
                ConnectionStringSettings connTemplate = new ConnectionStringSettings("MembershipConnection", component.GetConnString(), "System.Data.SqlClient");
                connectionStringsSection.ConnectionStrings.Add(connTemplate);
            }
        }
        public void Serialize_xml_config_settings_from_class()
        {
            InstallerConfig config = new InstallerConfig();

            //User user = new User();
            //user.UserName = "******";
            //user.Password = "******";

            //Role role = new Role();
            //role.Name = "SuperAdministrator";
            //role.AddUser(user);
            //config.AddRole(role);

            //role = new Role();
            //role.Name = "Administrator";

            //user = new User();
            //user.UserName = "******";
            //user.Password = "******";

            //role.AddUser(user);

            //user = new User();
            //user.UserName = "******";
            //user.Password = "******";

            //role.AddUser(user);
            //config.AddRole(role);

            Database db = new Database();
            db.ConnectionStringName = "MyCoolConnection";
            db.DataSource = "localhost";
            db.InitialCatalog = "MyCoolDb";
            db.UserName = "******";
            db.Password = "******";
            config.Database = db;

            Serializer<InstallerConfig>.Serialize(config, "installer.config");
        }
        public string GetConnString(InstallerConfig config, string dbName)
        {
            string connString = "Data Source=" + config.Database.DataSource.Trim() + ";";
            if (!string.IsNullOrEmpty(dbName))
            {
                connString += "Initial Catalog=" + dbName + ";";
            }
            else
            {
                connString += "Initial Catalog=" + config.Database.InitialCatalog + ";";
            }

            if (config.Database.UseTrustedConnection)
            {
                connString += "Integrated Security=true;";
            }
            else
            {
                connString += "User ID=" + config.Database.UserName.Trim() + ";Password="******";";
            }
            return connString;
        }
        /// <summary>
        /// Update the web.config connection strings. If the EntityFramework is being used, two connection strings
        /// will be created. One for the EntityFramework, and another for the Membership system.
        /// </summary>
        /// <param name="config"></param>
        /// <param name="configSection"></param>
        private void UpdateConnectionString(InstallerConfig config, Configuration configSection)
        {
            ConnectionStringsSection connectionStringsSection = configSection.ConnectionStrings;

            string connString = string.Empty;
            string providerName = string.Empty;

            if (!string.IsNullOrEmpty(config.Database.EntityFrameworkEntitiesName))
            {
                // EntityFramework connection string
                providerName = component.GetProviderName;
                connString = component.GetConnString();

                string efname = config.Database.EntityFrameworkEntitiesName;

                ConnectionStringSettings appTemplate = new ConnectionStringSettings(config.Database.EntityFrameworkEntitiesName, connString, providerName);
                connectionStringsSection.ConnectionStrings.Clear();
                connectionStringsSection.ConnectionStrings.Add(appTemplate);

                if (!string.IsNullOrEmpty(config.Database.EntityFrameworkEntitiesName) && config.Membership.Create)
                {
                    config.Database.EntityFrameworkEntitiesName = "";
                    ConnectionStringSettings connTemplate = new ConnectionStringSettings("MembershipConnection", component.GetConnString(), "System.Data.SqlClient");
                    connectionStringsSection.ConnectionStrings.Add(connTemplate);
                    config.Database.EntityFrameworkEntitiesName = efname;
                }
            }
            else
            {
                // Standard SqlServer Connection string
                providerName = component.GetProviderName;
                connString = component.GetConnString();

                ConnectionStringSettings appTemplate = new ConnectionStringSettings(config.Database.ConnectionStringName, connString, providerName);
                connectionStringsSection.ConnectionStrings.Clear();
                connectionStringsSection.ConnectionStrings.Add(appTemplate);
            }
        }
        public string GetConnString(InstallerConfig config, string dbName)
        {
            string connString = string.Empty;

            //if (config.Database.UseSqlCe40)
            //{
            //    connString = SqlCeConnection(config);
            //}
            //else
            //{
            //    // For standard connections.
            //    connString = NamedDbConnection(config, dbName);
            //}

            /* Update by King Wilder
             * Date: November 22, 2011
             * This uses the new ConnectionFactory to generate proper connection strings based
             * on the incoming parameters in the InstallerConfig object.
             */
            ConnectionFactory factory = new ConnectionFactory(config);
            connString = factory.ConnectionString();

            return connString;
        }
        public void entityframework_connection_composes_sqlconnectionstring_using_credentials()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "BloggerApp";
            config.Database.UseTrustedConnection = false;
            config.Database.EntityFrameworkEntitiesName = "BloggerEntities";
            config.Database.UserName = "******";
            config.Database.Password = "******";

            IConnectionProvider efprovider = new EntityFrameworkConnectionString(config);

            // Act
            var actual = efprovider.GetConnectionString();
            var expected = @"metadata=res://*/Models.BloggerEntities.csdl|res://*/Models.BloggerEntities.ssdl|res://*/Models.BloggerEntities.msl;provider=System.Data.SqlClient;";
            expected += @"provider connection string=""Data Source=kingwilder-pc\sqlserver;Initial Catalog=BloggerApp;User ID=dbadminuser;Password=dbadminpassword;MultipleActiveResultSets=True;Application Name=EntityFramework""";

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void standard_sql_connection_string_with_userid_password()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "CommerceApp";
            config.Database.UseTrustedConnection = false;
            config.Database.UserName = "******";
            config.Database.Password = "******";

            IConnectionProvider provider = new SqlConnectionString(config);

            // Act
            var actual = provider.GetConnectionString();
            var expected = @"Data Source=kingwilder-pc\sqlserver;Initial Catalog=CommerceApp;User ID=dbadminuser;Password=dbadminpassword";

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void standard_sql_connection_string_with_integrated_security()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "BloggerApp";
            config.Database.UseTrustedConnection = true;

            ISqlConnection provider = new SqlConnectionString(config);

            // Act
            var actual = provider.GetConnectionString();
            var expected = @"Data Source=kingwilder-pc\sqlserver;Initial Catalog=BloggerApp;Integrated Security=True";

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void standard_sql_connection_string_with_all_parameters_returns_integrated_security()
        {
            // Arrange
            InstallerConfig config = new InstallerConfig();
            config.Database.DataSource = @"kingwilder-pc\sqlserver";
            config.Database.InitialCatalog = "CommerceApp";
            config.Database.UseTrustedConnection = true;
            config.Database.UserName = "******";
            config.Database.Password = "******";

            IConnectionProvider provider = new SqlConnectionString(config);

            // Act
            var actual = provider.GetConnectionString();
            var expected = @"Data Source=kingwilder-pc\sqlserver;Initial Catalog=CommerceApp;Integrated Security=True";

            // Assert
            Assert.AreEqual(expected, actual);
        }
Example #16
0
        /// <summary>
        /// Run the process to install the database and users.
        /// </summary>
        /// <param name="config"></param>
        public static void Run(InstallerConfig config)
        {
            if (config == null)
                throw new NullReferenceException("config");

            try
            {
                // Update the web.config/connectionStrings section.
                UpdateWebConfig(config);

                // Create membership roles and users.
                CreateMembership(config);

                // Now execute the sql scripts.
                RunScripts(config);

                // Now create the roles and add users.
                AddUsers(config);

                // Finally remove the AppInstalled key in the appsettings.
                RemoveAppInstalledKey();
            }
            catch (Exception)
            {
                throw;
            }
        }
Example #17
0
        /// <summary>
        /// Write the new connection string to the web.config file and update the membership sections if necessary.
        /// </summary>
        private static void UpdateWebConfig(InstallerConfig config)
        {
            System.Configuration.Configuration configSection = WebConfigurationManager.OpenWebConfiguration("~");
            if (configSection == null)
            {
                throw new InvalidOperationException("Configuration file not available.");
            }

            IConnectionStringComponent component = new ConnectionStringComponent(config);
            IConfigurationFactory factory = new ConfigurationFactory(component);
            factory.Execute(config, configSection);

            // You can uncomment this if you want to add a LocalSqlServer connection.
            // I am connecting to the ASPNETDB tables with the same connection string since they are both in the same database.
            // If you create a separate ASPNETDB database, then you can uncomment the following and set the connection string manually.
            //ConnectionStringSettings LocalSqlServer = new ConnectionStringSettings("LocalSqlServer", component.GetConnString(), "System.Data.SqlClient");
            //ConnectionStringsSection connSection = configSection.ConnectionStrings;
            //connSection.ConnectionStrings.Add(LocalSqlServer);

            configSection.Save();

            Fix();
        }
 public ConnectionStringComponent(InstallerConfig config)
 {
     this.config = config;
 }
Example #19
0
        /// <summary>
        /// Add users and roles inside a transaction in case there's an exception, 
        /// we can simply click the "Install" button again.
        /// </summary>
        /// <param name="config"></param>
        private static void AddUsers(InstallerConfig config)
        {
            if (config.Membership.Create)
            {
                using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
                {
                    // Now create the roles
                    foreach (var role in config.RoleManager.Roles)
                    {
                        if (!Roles.RoleExists(role.Name))
                            Roles.CreateRole(role.Name);
                        //throw new Exception("Error adding user - by King.");

                        // Now create user and add to role.
                        foreach (var user in role.Users)
                        {
                            MembershipCreateStatus status = MembershipCreateStatus.UserRejected;
                            MembershipUser u = System.Web.Security.Membership.CreateUser(user.UserName.Trim(), user.Password.Trim(), user.Email.Trim(),
                                user.SecretQuestion.Trim(), user.SecretAnswer.Trim(), true, out status);

                            if (status == MembershipCreateStatus.Success)
                            {
                                // Add user to role
                                Roles.AddUserToRole(user.UserName, role.Name);
                            }
                            else if (status == MembershipCreateStatus.DuplicateUserName)
                            {
                                // Add a duplicate username to another role.
                                // This allows the same user to be added to any number of roles.
                                try
                                {
                                    Roles.AddUserToRole(user.UserName, role.Name);
                                }
                                catch (Exception)
                                {
                                }
                            }
                            else if (status == MembershipCreateStatus.InvalidPassword)
                            {
                                throw new ApplicationException("Please update the install.config file.  The passwords don't adhere to the rules in the web.config/membership section.");
                            }
                        }
                    }
                    scope.Complete();
                }
            }
        }
 public SqlCe40ConnectionString(InstallerConfig config)
 {
     this.config = config;
 }
Example #21
0
 private void InstallASPNETDBTables(InstallerConfig config)
 {
     string[] files = Directory.GetFiles(config.Path.AppPath + @"App_Data\scripts");
     foreach (string file in files)
     {
         string[] statements = GetScriptStatements(File.ReadAllText(file, new System.Text.UTF8Encoding()), StringSplitOptions.None);
         ExecuteStatements(statements, config);
     }
 }
Example #22
0
 public ConnectionFactory(InstallerConfig config)
 {
     this._config = config;
 }
 public InstallerRulesValidator(InstallerConfig config)
 {
     this.config = config;
 }
Example #24
0
        /// <summary>
        /// Create the Membership database and set the roles and users.
        /// </summary>
        /// <param name="config"></param>
        private static void CreateMembership(InstallerConfig config)
        {
            if (config.Membership.Create)
            {
                // Let's first verify that the RoleManager is enabled.
                if (!Roles.Enabled)
                    throw new ApplicationException("The RoleManager was not Enabled. It has been updated! Click &quot;Install&quot; to continue.");

                // Added: 5/19/2011 By King Wilder
                // Needed a way to validate rules based on the Membership section
                // in the web.config, such as minRequiredPasswordLength.  This
                // factory class will create rules based on these requirements and
                // validate the InstallerConfig values then display the error
                // messages back to the browser.
                System.Configuration.Configuration configSection = WebConfigurationManager.OpenWebConfiguration("~");
                IRulesValidationFactory rulesFactory = new RulesValidationFactory(config, configSection);
                if (!rulesFactory.Validate())
                {
                    StringBuilder sb = new StringBuilder();
                    sb.Append("<p><b>There are some items that need your attention:</b></p>");
                    sb.Append("<ul>");
                    foreach (string error in rulesFactory.ValidationErrors)
                    {
                        sb.AppendFormat("<li>{0}</li>", error);
                    }
                    sb.Append("</ul>");
                    sb.Append("<p>Please fix these issues in the installer.config file and then come back and click the &quot;Install&quot; button.</p>");

                    throw new ApplicationException(sb.ToString());
                }

                // Add the ASPNETDB tables to the database using the SqlServices Install method.
                // This will add the ASPNETDB tables to the same database as the application.
                // NOTE: This method can ONLY be used for SQL Server.  To point to MySql,
                // you will need to create the database scripts for MySql and add them to
                // the RunScripts method, but then you need to have the MySql data provider
                // set in the web.config.
                if (config.Database.UseTrustedConnection)
                {
                    // For SQL Server trusted connections
                    try
                    {
                        System.Web.Management.SqlServices.Uninstall(config.Database.DataSource.Trim(), config.Database.InitialCatalog, System.Web.Management.SqlFeatures.All);
                    }
                    catch (SqlException)
                    {
                    }

                    //DropASPNETDBTables(config);
                    System.Web.Management.SqlServices.Install(config.Database.DataSource.Trim(), config.Database.InitialCatalog, System.Web.Management.SqlFeatures.All);
                }
                else
                {
                    // For SQL Server
                    try
                    {
                        System.Web.Management.SqlServices.Uninstall(config.Database.DataSource.Trim(), config.Database.UserName, config.Database.Password, config.Database.InitialCatalog, System.Web.Management.SqlFeatures.All);
                    }
                    catch (SqlException)
                    {
                    }

                    //DropASPNETDBTables(config);
                    System.Web.Management.SqlServices.Install(config.Database.DataSource.Trim(), config.Database.UserName, config.Database.Password, config.Database.InitialCatalog, System.Web.Management.SqlFeatures.All);
                }

            }
        }
 public RulesValidationFactory(InstallerConfig config, Configuration configSection)
 {
     this._config = config;
     this._membershipSection = (MembershipSection)configSection.GetSection("system.web/membership");
 }
 public EntityFrameworkConnectionString(InstallerConfig config)
 {
     this.config = config;
 }
        public void Execute(InstallerConfig config, Configuration configSection)
        {
            UpdateConnectionString(config, configSection);

            UpdateMembershipProviders(configSection, config);
        }
Example #28
0
 public static void UpdateConfig(InstallerConfig config)
 {
     // Update the web.config/connectionStrings section.
     UpdateWebConfig(config);
 }
        /// <summary>
        /// Update the web.config membership related config sections, membership, profile, and roleManager.
        /// And also set the roleManager Enabled property to true.
        /// </summary>
        /// <param name="configSection"></param>
        /// <param name="config"></param>
        private void UpdateMembershipProviders(Configuration configSection, InstallerConfig config)
        {
            if (config.Membership.Create)
            {
                MembershipSection membership = configSection.GetSection("system.web/membership") as MembershipSection;
                ProfileSection profile = configSection.GetSection("system.web/profile") as ProfileSection;
                RoleManagerSection roleManager = configSection.GetSection("system.web/roleManager") as RoleManagerSection;

                string connString = config.Database.ConnectionStringName;
                if (!string.IsNullOrEmpty(config.Database.EntityFrameworkEntitiesName))
                {
                    connString = "MembershipConnection";
                }

                // Update the membership section.
                bool isCustomMembershipProvider = (config.Membership.ProviderName == "AspNetSqlMembershipProvider") ? false : true;
                membership.DefaultProvider = config.Membership.ProviderName;

                for (int i = 0; i < membership.Providers.Count; i++)
                {
                    if (membership.Providers[i].Name == "AspNetSqlMembershipProvider")
                    {
                        membership.Providers[i].Parameters["connectionStringName"] = connString;
                        membership.Providers[i].Parameters["name"] = "AspNetSqlMembershipProvider";
                        membership.Providers[i].Parameters["type"] = "System.Web.Security.SqlMembershipProvider";
                        membership.Providers[i].Parameters["applicationName"] = config.ApplicationName;
                    }
                }

                if (isCustomMembershipProvider)
                {
                    // Create a new provider.
                    ProviderSettings p = new ProviderSettings();
                    p.Parameters["connectionStringName"] = connString;
                    p.Parameters["name"] = config.Membership.ProviderName;
                    p.Parameters["type"] = config.Membership.type;
                    p.Parameters["applicationName"] = config.ApplicationName;
                    membership.Providers.Add(p);
                }

                // Update the profile section.
                bool isCustomProfileProvider = (config.Profile.ProviderName == "AspNetSqlProfileProvider") ? false : true;
                profile.DefaultProvider = config.Profile.ProviderName;
                for (int i = 0; i < profile.Providers.Count; i++)
                {
                    if (profile.Providers[i].Name == "AspNetSqlProfileProvider")
                    {
                        profile.Providers[i].Parameters["connectionStringName"] = connString;
                        profile.Providers[i].Parameters["name"] = "AspNetSqlProfileProvider";
                        profile.Providers[i].Parameters["type"] = "System.Web.Profile.SqlProfileProvider";
                        profile.Providers[i].Parameters["applicationName"] = config.ApplicationName;
                    }
                }

                if (isCustomProfileProvider)
                {
                    ProviderSettings p = new ProviderSettings();
                    p.Parameters["connectionStringName"] = connString;
                    p.Parameters["name"] = config.Profile.ProviderName;
                    p.Parameters["type"] = config.Profile.type;
                    p.Parameters["applicationName"] = config.ApplicationName;
                    profile.Providers.Add(p);
                }

                // Update the roleManager section.
                bool isCustomRoleProvider = (config.RoleManager.ProviderName == "AspNetSqlRoleProvider") ? false : true;
                roleManager.DefaultProvider = config.RoleManager.ProviderName;
                for (int i = 0; i < roleManager.Providers.Count; i++)
                {
                    if (roleManager.Providers[i].Name == "AspNetSqlRoleProvider")
                    {
                        roleManager.Providers[i].Parameters["connectionStringName"] = connString;
                        roleManager.Providers[i].Parameters["name"] = "AspNetSqlRoleProvider";
                        roleManager.Providers[i].Parameters["type"] = "System.Web.Security.SqlRoleProvider";
                        roleManager.Providers[i].Parameters["applicationName"] = config.ApplicationName;
                    }
                }

                if (isCustomRoleProvider)
                {
                    ProviderSettings p = new ProviderSettings();
                    p.Parameters["connectionStringName"] = connString;
                    p.Parameters["name"] = config.RoleManager.ProviderName;
                    p.Parameters["type"] = config.RoleManager.type;
                    p.Parameters["applicationName"] = config.ApplicationName;
                    roleManager.Providers.Add(p);
                }

                roleManager.Enabled = true;
            }
        }
Example #30
0
 /// <summary>
 /// This will execute the sql statements.
 /// </summary>
 /// <param name="tableStatements"></param>
 /// <param name="dbName"></param>
 private static void ExecuteStatements(string[] tableStatements, InstallerConfig config)
 {
     if (tableStatements.Length > 0)
     {
         using (SqlConnection conn = new SqlConnection())
         {
             // Make sure we're not returning the EntityFramework connection string.
             config.Database.EntityFrameworkEntitiesName = "";
             IConnectionStringComponent component = new ConnectionStringComponent(config);
             conn.ConnectionString = component.GetConnString();
             conn.Open();
             using (SqlCommand command = new SqlCommand(string.Empty, conn))
             {
                 foreach (string statement in tableStatements)
                 {
                     command.CommandText = statement;
                     command.ExecuteNonQuery();
                 }
             }
         }
     }
 }