/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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(); }