Exemple #1
0
        //[BasicAuthenticationAttribute]
        public List <db_migration_history> Get(string action, string database, int Id, string server)
        {
            var envs            = JsonConvert.DeserializeObject <Environments>(File.ReadAllText(ConfigurationManager.AppSettings["envPath"].ToString()));
            var dbScriptPath    = envs.environments.Where(e => e.server == server).Select(s => s.scriptPath).FirstOrDefault();
            var dbScriptPath1   = ConfigurationManager.AppSettings["dbScriptPath1"].ToString();
            var selectedenvInfo = envs.environments.Where(e => e.server == server).Select(d => d.Databases).FirstOrDefault();
            var dbInfo          = selectedenvInfo.Where(d => d.name == database).Select(d => d).FirstOrDefault();

            if (action == "run")
            {
                List <string> filesExecuted = new List <string>();


                using (DbMigrationEntities db = new DbMigrationEntities())
                {
                    db.Database.Connection.ConnectionString = "server=" + server + "; database=" + database + ";" + "uid=" + dbInfo.username + ";password="******"; Connect Timeout=0; Max Pool Size=5000";

                    var    dbMigrationHistory = db.db_migration_history.ToList();
                    Double latestVersion      = Convert.ToDouble(dbMigrationHistory.OrderByDescending(c => c.installed_on).Select(v => v.version).FirstOrDefault());
                    Console.WriteLine(latestVersion);
                    var           scriptExecutedNames = dbMigrationHistory.Select(c => c.script).ToList();
                    List <string> scriptColl          = new List <string>();
                    foreach (var item in scriptExecutedNames)
                    {
                        scriptColl.Add(item);
                    }
                    // Get All Files from folder
                    DirectoryInfo d     = new DirectoryInfo(dbScriptPath);                  //Assuming Test is your Folder
                    FileInfo[]    Files = d.GetFiles("*.sql", SearchOption.AllDirectories); //Getting Text files

                    string str = "";
                    foreach (FileInfo file in Files)
                    {
                        Console.WriteLine(file.Name);
                        if (scriptExecutedNames.Contains(file.FullName.Replace(dbScriptPath1, "")))
                        {
                            continue;
                        }
                        else
                        {
                            if (latestVersion == 0.0)
                            {
                                latestVersion = 1.0;
                            }

                            latestVersion = latestVersion + 0.1;
                            ProcessDBScript(file.FullName, "Data source=" + server + ";initial catalog=" + database + ";persist security info=True;" + "uid=" + dbInfo.username + "; password = "******";", file.FullName.Replace(dbScriptPath, ""), latestVersion.ToString(), Id);
                            filesExecuted.Add(file.FullName.Replace(dbScriptPath, ""));;
                        }
                    }
                }
            }
            using (var context = new DbMigrationEntities())
            {
                context.Database.Connection.ConnectionString = "server=" + server + ";database=" + database + ";" + "uid=" + dbInfo.username + "; password = "******"; Connect Timeout=0; Max Pool Size=5000";
                return(context.db_migration_history.ToList());
            }
        }
Exemple #2
0
        public void ProcessDBScript(string fileName, string connectionString, string filewithoutPath, string version, int Id)
        {
            bool   status        = true;
            var    dbScriptPath1 = ConfigurationManager.AppSettings["dbScriptPath1"].ToString();
            string error         = string.Empty;

            using (SqlConnection cn = new SqlConnection(connectionString))
            {
                try
                {
                    cn.Open();
                    FileInfo   file      = new FileInfo(fileName);
                    string     script    = file.OpenText().ReadToEnd();
                    string[]   splitChar = { "\r\nGO\r\n" };
                    var        sqlLines  = script.Split(splitChar, StringSplitOptions.RemoveEmptyEntries);
                    int        res       = 0;
                    SqlCommand cmd       = null;
                    foreach (var query in sqlLines)
                    {
                        cmd = new SqlCommand(query, cn)
                        {
                            CommandTimeout = 5400
                        };
                        res = cmd.ExecuteNonQuery();
                    }
                    cn.Close();
                }
                catch (Exception ex)
                {
                    status = false;
                    error  = ex.Message.Substring(0, 48);
                }
                finally
                {
                    cn.Close();
                }

                using (var context = new DbMigrationEntities())
                {
                    context.Database.Connection.ConnectionString = connectionString;
                    var migration = new db_migration_history()
                    {
                        script       = filewithoutPath.Replace(dbScriptPath1, ""),
                        installed_on = DateTime.Now,
                        installed_by = "cape",
                        success      = status,
                        version      = version,
                        Error        = error,
                        ExecutionId  = Id
                    };
                    context.db_migration_history.Add(migration);

                    context.SaveChanges();
                }
            }
        }