Exemple #1
0
        static bool CheckForDbExistence(MSSQLServer dbserver, string dbname)
        {
            Query query = new Query();

            try
            {
                bool success = true;
                bool exists  = false;
                dbserver.Database = "master";

                if (dbserver.SetConnection())
                {
                    exists = (dbserver.GetData($"SELECT * FROM sys.databases WHERE name = '{dbname}'").Rows.Count > 0) ? true : false;
                }

                if (!exists)
                {
                    Console.Write($"\r\nDatabase {dbname} does not exist on {dbserver.Server}. Auto-create with schema script? (yes/no) (y/n):  ");
                    var answer = Console.ReadLine();

                    if (answer.ToUpper() == "YES" || answer.ToUpper() == "Y")
                    {
                        Console.Write("Creating database... ");
                        dbserver.WriteData($"CREATE DATABASE {dbname}");
                        Console.WriteLine("Done");

                        dbserver.Database = dbname;
                        Console.WriteLine("Executing schema script... ");

                        //var sql = query.Schema.Replace("$DbName$", dbname);
                        if (!dbserver.WriteData(query.Schema))
                        {
                            success = false;
                            Console.WriteLine("(ERROR) Could not complete schama script execution. Please verify.");
                        }
                        else
                        {
                            Console.WriteLine("Done");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Ignoring auto-create... Make sure the schema exists on this server.");
                    }
                }

                return(success);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #2
0
        static bool SetupPublisherLogReaderAgent(MSSQLServer publisher)
        {
            Query query   = new Query();
            bool  success = true;

            try
            {
                Console.Write("Setting up log reader agent security context... ");
                publisher.SetConnection();
                if (!publisher.WriteData(query.Publisher.SetLogReaderAgent
                                         .Replace("$user$", publisher.User)
                                         .Replace("$password$", publisher.Password)))
                {
                    success = false;
                }
                else
                {
                    Console.WriteLine("Done");
                }

                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #3
0
        static bool CreatePublication(MSSQLServer publisher)
        {
            Query query   = new Query();
            bool  success = true;

            try
            {
                if (!publisher.SetConnection())
                {
                    return(false);
                }

                Console.Write("\r\nCreating publication... ");
                if (!publisher.WriteData(query.Publisher.AddPublication.Replace("$Database$", publisher.Database)))
                {
                    success = false;
                }
                Console.WriteLine("Done");

                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #4
0
        static bool SetupDatabaseForReplication(MSSQLServer publisher)
        {
            Query query   = new Query();
            bool  success = true;

            try
            {
                //CheckForDbExistence(publisher, publisher.Database);

                Console.Write("\r\nSetting up database for replication... ");
                if (!publisher.WriteData(query.Publisher.DatabaseReplOption.Replace("$Database$", publisher.Database)))
                {
                    success = false;
                }
                else
                {
                    Console.WriteLine("Done");
                }

                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error setting up database for replication. {ex.Message} | {ex.StackTrace}");
                return(false);
            }
        }
Exemple #5
0
        static bool AddDistributorPublisher(MSSQLServer distributor, MSSQLServer publisher)
        {
            bool  success = true;
            Query query   = new Query();

            try
            {
                //Add publisher to distributor
                Console.Write("Adding publisher on distributor... ");
                if (publisher.SetConnection())
                {
                    var publisherHostname = publisher.GetData("SELECT @@SERVERNAME").Rows[0][0].ToString();
                    distributor.SetConnection();
                    var sql = query.Distributor.AddPublisher.Replace("$HostName$", publisherHostname).Replace("$DistributionDbName$", distributor.Database);
                    if (!distributor.WriteData(sql))
                    {
                        success = false;
                    }
                    else
                    {
                        Console.WriteLine("Done");
                    }
                }
                else
                {
                    success = false;
                    Console.WriteLine($"(ERROR) Could not connect to publisher");
                }

                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ERROR - Could not add publisher to distributor. {ex.Message} | {ex.StackTrace}");
                return(false);
            }
        }
Exemple #6
0
        static bool ConfigurePublisher(ref MSSQLServer publisher, ref MSSQLServer distributor)
        {
            bool  success           = true;
            bool  alreadyConfigured = false;
            Query query             = new Query();

            try
            {
                Console.Write("Setting up publisher... ");

                if (publisher.Server == distributor.Server)
                {
                    Console.WriteLine("Distributor and Publisher are the same server. Skipping this step... ");
                    alreadyConfigured = true;
                }

                if (!alreadyConfigured)
                {
                    var distributorHostName = distributor.GetData("SELECT @@SERVERNAME").Rows[0][0].ToString();
                    if (!publisher.WriteData(query.Publisher.AddDistributor
                                             .Replace("$DistributorHostName$", distributorHostName)
                                             .Replace("$Password$", publisher.Password)))
                    {
                        success = false;
                    }
                    else
                    {
                        Console.WriteLine("Done");
                    }
                }
                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #7
0
        static bool AddArticle(MSSQLServer publisher)
        {
            Query query   = new Query();
            bool  success = true;

            try
            {
                Console.Write("Article name? ");
                var article = Console.ReadLine();

                if (publisher.GetData($"SELECT * FROM sys.tables WHERE name = NULLIF('{article}','')").Rows.Count > 0)
                {
                    Console.Write($"Article existence validated... Adding it to this database publication (Db: {publisher.Database})... ");
                    if (publisher.WriteData(query.Publisher.AddArticle.Replace("$article$", article).Replace("$database$", publisher.Database)))
                    {
                        Console.WriteLine("Done");
                    }
                    else
                    {
                        success = false;
                    }
                }

                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #8
0
        static bool AddSubscription(MSSQLServer publisher, MSSQLServer distributor, string dbname)
        {
            bool        success    = true;
            MSSQLServer subscriber = new MSSQLServer();
            Query       query      = new Query();

            subscriber.DebugMode = true;
            try
            {
                Console.Write("Subscriber Ip address: ");
                subscriber.Server = Console.ReadLine();

                Console.Write("Subscriber Port number (blank if default): ");
                var subscriberPort = Console.ReadLine();
                subscriber.Server = $"{subscriber.Server},{(string.IsNullOrWhiteSpace(subscriberPort) ? "1433" : subscriberPort)}";

                Console.Write("Subscriber mssql User: "******"Subscriber mssql Password: "******"Adding new subscription... ");
                    var subscriberHostName = subscriber.GetData("SELECT @@SERVERNAME").Rows[0][0].ToString();

                    publisher.SetConnection();
                    if (!publisher.WriteData(query.Publisher.AddSubscription.Replace("$database$", publisher.Database).Replace("$hostname$", subscriberHostName)))
                    {
                        success = false;
                    }
                    else
                    {
                        Console.WriteLine("Done");
                    }

                    Console.Write("Adding it's push subscription agent... ");
                    if (!publisher.WriteData(query.Publisher.AddPushSubscriptionAgent
                                             .Replace("$database$", publisher.Database)
                                             .Replace("$subscriberHostname$", subscriberHostName)
                                             .Replace("$user$", subscriber.User)
                                             .Replace("$password$", subscriber.Password)))
                    {
                        success = false;
                    }
                    else
                    {
                        Console.WriteLine("Done");
                    }

                    Console.Write("\r\nSetup birectional replication for this subscriber? (yes/no) (y/n) ");
                    var answer = Console.ReadLine();

                    if (answer.ToUpper() == "YES" || answer.ToUpper() == "Y")
                    {
                        if (AddDistributorPublisher(distributor, subscriber))
                        {
                            if (ConfigurePublisher(ref subscriber, ref distributor))
                            {
                                subscriber.Database = dbname;
                                if (SetupDatabaseForReplication(subscriber))
                                {
                                    if (CreatePublication(subscriber))
                                    {
                                        do
                                        {
                                            Console.Write("Add article(s) (yes/no) (y/n) ");
                                            answer = Console.ReadLine();

                                            if (answer.ToUpper() == "YES" || answer.ToUpper() == "Y")
                                            {
                                                AddArticle(subscriber);
                                            }
                                        } while (answer.ToUpper() == "YES" || answer.ToUpper() == "Y");

                                        Console.Write("Adding new subscription for this subscriber... ");
                                        var publisherHostName = publisher.GetData("SELECT @@SERVERNAME").Rows[0][0].ToString();

                                        if (!subscriber.WriteData(query.Publisher.AddSubscription
                                                                  .Replace("$database$", subscriber.Database)
                                                                  .Replace("$hostname$", publisherHostName)))
                                        {
                                            success = false;
                                        }
                                        else
                                        {
                                            Console.WriteLine("Done");
                                        }

                                        Console.Write("Adding it's push subscription agent... ");
                                        if (!subscriber.WriteData(query.Publisher.AddPushSubscriptionAgent
                                                                  .Replace("$database$", subscriber.Database)
                                                                  .Replace("$subscriberHostname$", publisherHostName)
                                                                  .Replace("$user$", publisher.User)
                                                                  .Replace("$password$", publisher.Password)))
                                        {
                                            success = false;
                                        }
                                        else
                                        {
                                            Console.WriteLine("Done");
                                        }

                                        if (success)
                                        {
                                            SetupPublisherLogReaderAgent(subscriber);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    success = false;
                    Console.WriteLine("(ERROR) Could not connect to subscriber. Verify credentials");
                }

                if (success)
                {
                    return(true);
                }
                return(false);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #9
0
        static bool ConfigureDistributor(ref MSSQLServer distributor, ref MSSQLServer publisher)
        {
            Query query   = new Query();
            bool  success = true;

            try
            {
                Console.Write("Distributor Ip address: ");
                distributor.Server = Console.ReadLine();

                Console.Write("Distributor Port number (blank if default): ");
                var distributorPort = Console.ReadLine();
                distributor.Server = $"{distributor.Server},{(string.IsNullOrWhiteSpace(distributorPort) ? "1433" : distributorPort)}";

                Console.Write("Distributor mssql User: "******"Distributor mssql Password: "******"\r\nPublisher Ip address: ");
                publisher.Server = Console.ReadLine();

                Console.Write("Publisher Port number (blank if default): ");
                var publisherPort = Console.ReadLine();
                publisher.Server = $"{publisher.Server},{(string.IsNullOrWhiteSpace(publisherPort) ? "1433" : publisherPort)}";

                Console.Write("Publisher mssql User: "******"Publisher mssql Password: "******"master";
                publisher.Database   = "master";

                if (distributor.SetConnection())
                {
                    Console.WriteLine($"\r\nSuccessfully connected to distributor engine on {distributor.Server} with {distributor.User}");

                    //Add Distributor
                    Console.Write("Setting up distributor... ");
                    if (!distributor.WriteData(query.Distributor.Add.Replace("$Password$", distributor.Password)))
                    {
                        success = false;
                    }
                    Console.WriteLine("Done");

                    //Create Distribution Database
                    Console.Write("Creating distribution database... ");
                    distributor.Database = "distribution";
                    if (!distributor.WriteData(query.Distributor.AddDb.Replace("$DbName$", distributor.Database)))
                    {
                        success = false;
                    }
                    Console.WriteLine("Done");

                    if (!AddDistributorPublisher(distributor, publisher))
                    {
                        success = false;
                    }
                }
                else
                {
                    success = false;
                    Console.WriteLine($"(ERROR) Could not connect to distributor engine on {distributor.Server} with {distributor.User}");
                }

                if (success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #10
0
        /// <summary>
        /// Creates a new company on the repository
        /// </summary>
        /// <param name="company">Company object</param>
        /// <returns>Successful or unsuccessful transaction</returns>
        public bool CreateCompany(Company company)
        {
            bool success = false;
            var  query   = $"INSERT INTO Empresa (Codigo, Nombre) VALUES('{company.Code}', '{company.Name}')";

            if (_db.SetConnection())
            {
                if (_db.WriteData(query))
                {
                    success = true;
                }
            }

            return(success);
        }