示例#1
0
        /// <summary>
        /// Retorna uma lista de objetos DatabaseStructureDTO contendo as tabelas referente ao schema.
        /// </summary>
        /// <param name="schema">Nome do schema representado no Banco de dados. Ex.: emp0001</param>
        /// <returns></returns>
        public List <DatabaseStructureDTO> GetTables(string schema)
        {
            try
            {
                dbCommand = db.GetSqlStringCommand("SELECT relname AS clsname FROM pg_class cls" +
                                                   " LEFT JOIN pg_namespace nsp ON (cls.relnamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema AND cls.relkind = 'r'" +
                                                   " ORDER BY relname;");
                db.AddInParameter(dbCommand, "@schema", DbType.String, schema);

                using (IDataReader DR = db.ExecuteReader(dbCommand))
                {
                    List <DatabaseStructureDTO> List = new List <DatabaseStructureDTO>();
                    while (DR.Read())
                    {
                        DatabaseStructureDTO tab = new DatabaseStructureDTO();
                        tab.Name = DR["clsname"].ToString();
                        List.Add(tab);
                    }
                    return(List);
                }
            }
            catch
            {
                throw;
            }
        }
示例#2
0
        /// <summary>
        /// Retorna uma lista de objetos DatabaseStructureDTO contendo as funções (Stored Procedures) referente ao schema.
        /// </summary>
        /// <param name="schema">Nome do schema representado no Banco de dados. Ex.: emp0001</param>
        /// <returns></returns>
        public List <DatabaseStructureDTO> GetProcs(string schema)
        {
            try
            {
                dbCommand = db.GetSqlStringCommand("SELECT proname AS prcname FROM pg_proc prc" +
                                                   " LEFT JOIN pg_namespace nsp ON (prc.pronamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema" +
                                                   " ORDER BY proname;");
                db.AddInParameter(dbCommand, "@schema", DbType.String, schema);

                using (IDataReader DR = db.ExecuteReader(dbCommand))
                {
                    List <DatabaseStructureDTO> List = new List <DatabaseStructureDTO>();
                    while (DR.Read())
                    {
                        DatabaseStructureDTO tab = new DatabaseStructureDTO();
                        tab.Name = DR["prcname"].ToString();
                        List.Add(tab);
                    }
                    return(List);
                }
            }
            catch
            {
                throw;
            }
        }
示例#3
0
        /// <summary>
        /// Cria tabelas/objetos de acordo com a instrução especificada.
        /// </summary>
        /// <param name="tables">Tabela(s) a ser(em) criada(s)</param>
        public void Create(List <EstruturaTabelaDTO> tables)
        {
            try
            {
                List <DatabaseStructureDTO> databaseobjects = new DatabaseStructureDAO().GetObjects(Global.EmpresaAtiva);

                using (DbConnection connection = db.CreateConnection())
                {
                    connection.Open();
                    DbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

                    string objetoatual = string.Empty;

                    try
                    {
                        foreach (EstruturaTabelaDTO estrutura in tables)
                        {
                            objetoatual = estrutura.Descricao;
                            string DDL = estrutura.DDL.Replace("[empresa]", Global.EmpresaAtiva);
                            dbCommand = db.GetSqlStringCommand(DDL);

                            db.ExecuteNonQuery(dbCommand, transaction);

                            //OBJETOS (FK´S, PK´S, ÍNDICES, CHECKS, ETC)
                            foreach (EstruturaObjetoDTO objeto in estrutura.Objetos)
                            {
                                objetoatual = objeto.Descricao;
                                DDL         = objeto.DDL.Replace("[empresa]", Global.EmpresaAtiva);
                                dbCommand   = db.GetSqlStringCommand(DDL);

                                DatabaseStructureDTO objectstructure = databaseobjects.Find(delegate(DatabaseStructureDTO item) { return(item.Name.Equals(objeto.Nomeobjeto)); });
                                if (objectstructure == null)
                                {
                                    db.ExecuteNonQuery(dbCommand, transaction);
                                }
                            }
                        }
                        transaction.Commit();
                        connection.Close();
                    }
                    catch (DbException dbex)
                    {
                        transaction.Rollback();
                        connection.Close();
                        throw dbex;
                    }
                }
            }
            catch
            {
                throw;
            }
        }
示例#4
0
        /// <summary>
        /// Retorna uma lista de objetos DatabaseStructureDTO contendo os objetos (FK´s, PK´s, Índices, Checks, etc) referente ao schema.
        /// </summary>
        /// <param name="schema">Nome do schema representado no Banco de dados. Ex.: emp0001</param>
        /// <returns></returns>
        public List <DatabaseStructureDTO> GetObjects(string schema)
        {
            try
            {
                dbCommand = db.GetSqlStringCommand("SELECT conname AS objname FROM pg_constraint cnt" +
                                                   " LEFT JOIN pg_namespace nsp ON (cnt.connamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema AND cnt.contype = 'f'" + //GET FOREING KEYS
                                                   " UNION" +
                                                   " SELECT conname AS objname FROM pg_constraint cnt" +
                                                   " LEFT JOIN pg_namespace nsp ON (cnt.connamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema AND cnt.contype = 'c'" + //GET CHECKS
                                                   " UNION" +
                                                   " SELECT conname AS objname FROM pg_constraint cnt" +
                                                   " LEFT JOIN pg_namespace nsp ON (cnt.connamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema AND cnt.contype = 'p'" + //GET PK´S
                                                   " UNION" +
                                                   " SELECT relname AS objname FROM pg_class cls" +
                                                   " LEFT JOIN pg_namespace nsp ON (cls.relnamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema AND cls.relkind = 'i'" + //GET INDICES
                                                   " UNION" +
                                                   " SELECT relname AS objname FROM pg_class cls" +
                                                   " LEFT JOIN pg_namespace nsp ON (cls.relnamespace = nsp.oid)" +
                                                   " WHERE nsp.nspname = @schema AND cls.relkind = 'c'" + //GET COMPOSITE TYPES
                                                   " ORDER BY 1;");
                db.AddInParameter(dbCommand, "@schema", DbType.String, schema);

                using (IDataReader DR = db.ExecuteReader(dbCommand))
                {
                    List <DatabaseStructureDTO> List = new List <DatabaseStructureDTO>();
                    while (DR.Read())
                    {
                        DatabaseStructureDTO tab = new DatabaseStructureDTO();
                        tab.Name = DR["objname"].ToString();
                        List.Add(tab);
                    }
                    return(List);
                }
            }
            catch
            {
                throw;
            }
        }
示例#5
0
        /// <summary>
        /// Retorna um objeto DatabaseStructureDTO contendo o schema do Banco de dados.
        /// </summary>
        /// <param name="schema">Nome do schema representado no Banco de dados. Ex.: emp0001</param>
        public DatabaseStructureDTO GetSchema(string schema)
        {
            try
            {
                dbCommand = db.GetSqlStringCommand("SELECT nspname FROM pg_namespace" +
                                                   " WHERE nspname = @schema;");
                db.AddInParameter(dbCommand, "@schema", DbType.String, schema);

                using (IDataReader DR = db.ExecuteReader(dbCommand))
                {
                    DR.Read();
                    DatabaseStructureDTO tab = new DatabaseStructureDTO();
                    tab.Name = DR["nspname"].ToString();
                    return(tab);
                }
            }
            catch
            {
                throw;
            }
        }
示例#6
0
        /// <summary>
        /// Responsável por efetuar toda validação a nível de estrutura do Banco de dados.
        /// </summary>
        private void DataBaseStructure()
        {
            OpenForm form = OpenForm.Splash;

            frmWait wait = new frmWait();

            // frmSplashScreen waitSplash = new frmSplashScreen();

            //if (Application.OpenForms.Count == 1)
            //    Splash.Status = "Verificando a estrutura do Banco de dados...";
            //else
            //{

            if (Global.Id_UsuarioAtivo > 0) //42350
            {
                form = OpenForm.Main;
            }


            if (form == OpenForm.Splash)
            {
                Splash.Status = "Verificando a estrutura do Banco de dados...";
            }
            else
            {
                wait.NewMessage = "Verificando a estrutura do Banco de dados...";
            }
            wait.Show();
            Application.DoEvents();
            //}

            //ESTRUTURA BASE
            List <EstruturaTabelaDTO> tablesbase    = new List <EstruturaTabelaDTO>();
            List <EstruturaObjetoDTO> objectsbase   = new List <EstruturaObjetoDTO>();
            List <EstruturaFuncaoDTO> functionsbase = new List <EstruturaFuncaoDTO>();

            try
            {
                tablesbase    = estruturatabelaGL.GetListAll();
                objectsbase   = estruturaobjetoGL.GetListAll();
                functionsbase = estruturafuncaoGL.GetListAll();
            }
            catch
            {
                if (form == OpenForm.Splash)
                {
                    Splash.Close();
                }
                MessageBox.Show("Ocorreu uma falha geral a nível de estrutura do Banco de dados. Verifique junto ao suporte técnico as possíveis causas para solução do problema.", "Falha catastrófica", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.Exit(Environment.ExitCode);
            }
            //

            //INÍCIO
            try
            {
                DatabaseStructureDTO databasestructure = null;
                try
                {
                    databasestructure = databasestructureGL.GetSchema(Global.EmpresaAtiva);
                }
                catch { }
                if (databasestructure == null) //SEM SCHEMA
                {
                    //ESTRUTURA
                    if (form == OpenForm.Splash)
                    {
                        Splash.Status = "Criando a estrutura " + Global.EmpresaAtiva;
                    }
                    else
                    {
                        wait.NewMessage = "Criando a estrutura " + Global.EmpresaAtiva;
                        Application.DoEvents();
                    }
                    databasestructureGL.CreateSchema(Global.EmpresaAtiva);

                    //TABELAS/OBJETOS
                    if (form == OpenForm.Splash)
                    {
                        Splash.Status = "Criando as tabelas e objetos para " + Global.EmpresaAtiva;
                    }
                    else
                    {
                        wait.NewMessage = "Criando as tabelas e objetos para " + Global.EmpresaAtiva;
                        Application.DoEvents();
                    }
                    estruturatabelaGL.Create();

                    //FUNÇÕES
                    if (form == OpenForm.Splash)
                    {
                        Splash.Status = "Criando os procedimentos para " + Global.EmpresaAtiva;
                    }
                    else
                    {
                        wait.NewMessage = "Criando os procedimentos para " + Global.EmpresaAtiva;
                        Application.DoEvents();
                    }
                    estruturafuncaoGL.Create();
                }
                else //COM SCHEMA
                {
                    //TABELAS
                    List <DatabaseStructureDTO> tables = databasestructureGL.GetTables(Global.EmpresaAtiva);
                    if (tables.Count != tablesbase.Count)
                    {
                        List <EstruturaTabelaDTO> tablecreate = new List <EstruturaTabelaDTO>();
                        foreach (EstruturaTabelaDTO estruturabase in tablesbase)
                        {
                            DatabaseStructureDTO estrutura = tables.Find(delegate(DatabaseStructureDTO item) { return(item.Name.Equals(estruturabase.Nometabela)); });
                            if (estrutura == null)
                            {
                                tablecreate.Add(estruturabase);
                            }
                        }
                        if (tablecreate.Count > 0)
                        {
                            if (form == OpenForm.Splash)
                            {
                                Splash.Status = "Criando as tabelas e objetos para " + Global.EmpresaAtiva;
                            }
                            else
                            {
                                wait.NewMessage = "Criando as tabelas e objetos para " + Global.EmpresaAtiva;
                                Application.DoEvents();
                            }
                            estruturatabelaGL.Create(tablecreate);
                        }
                    }

                    //OBJETOS
                    List <DatabaseStructureDTO> objects = databasestructureGL.GetObjects(Global.EmpresaAtiva);
                    if (objects.Count != objectsbase.Count)
                    {
                        List <EstruturaObjetoDTO> objectcreate = new List <EstruturaObjetoDTO>();
                        foreach (EstruturaObjetoDTO estruturabase in objectsbase)
                        {
                            DatabaseStructureDTO estrutura = objects.Find(delegate(DatabaseStructureDTO item) { return(item.Name.Equals(estruturabase.Nomeobjeto)); });
                            if (estrutura == null)
                            {
                                objectcreate.Add(estruturabase);
                            }
                        }
                        if (objectcreate.Count > 0)
                        {
                            if (form == OpenForm.Splash)
                            {
                                Splash.Status = "Criando os objetos para " + Global.EmpresaAtiva;
                            }
                            else
                            {
                                wait.NewMessage = "Criando os objetos para " + Global.EmpresaAtiva;
                                Application.DoEvents();
                            }
                            estruturaobjetoGL.Create(objectcreate);
                        }
                    }

                    //FUNÇÕES
                    List <DatabaseStructureDTO> functions = databasestructureGL.GetProcs(Global.EmpresaAtiva);
                    if (functions.Count != functionsbase.Count)
                    {
                        List <EstruturaFuncaoDTO> functioncreate = new List <EstruturaFuncaoDTO>();
                        foreach (EstruturaFuncaoDTO estruturabase in functionsbase)
                        {
                            DatabaseStructureDTO estrutura = functions.Find(delegate(DatabaseStructureDTO item) { return(item.Name.Equals(estruturabase.Nomefuncao)); });
                            if (estrutura == null)
                            {
                                functioncreate.Add(estruturabase);
                            }
                        }
                        if (functioncreate.Count > 0)
                        {
                            if (form == OpenForm.Splash)
                            {
                                Splash.Status = "Criando os procedimentos para " + Global.EmpresaAtiva;
                            }
                            else
                            {
                                wait.NewMessage = "Criando os procedimentos para " + Global.EmpresaAtiva;
                                Application.DoEvents();
                            }
                            estruturafuncaoGL.Create(functioncreate);
                        }
                    }
                }
            }
            catch
            {
                if (form == OpenForm.Splash)
                {
                    Splash.Close();
                }
                MessageBox.Show("Ocorreu uma falha geral a nível de estrutura do Banco de dados. Verifique junto ao suporte técnico as possíveis causas para solução do problema.", "Falha catastrófica", MessageBoxButtons.OK, MessageBoxIcon.Error);
                throw;
            }
            wait.Close();
        }