예제 #1
0
 static void TestandoConexao(object sender, DoWorkEventArgs e)
 {
     ControladorBD cBD = new ControladorBD();
     ErroTeste = cBD.TestarConexao();
     if (ErroTeste != null)
         EstadoTesteCon = TesteConexao.TestouRetornouErro;
     else
         EstadoTesteCon = TesteConexao.Testou;
 }
        public static EsquemaTabela[] PegarEsquemaTabelasColunas()
        {
            EsquemaTabela[] esquemaTabelas;
            System.Data.DataTable tabEsquemaColunas;
            CampoBD[] camposTabela;
            ControladorBD cBD = new ControladorBD();
            //Pega o esquema das tabelas no BD
            System.Data.DataTable tabEsquemaTabelas = cBD.PegarEsquemaTabelas();

            esquemaTabelas = new EsquemaTabela[tabEsquemaTabelas.Rows.Count];
            //Laço para pegar o esquema de cada tabela
            for (int i = 0; i < tabEsquemaTabelas.Rows.Count; i++)
            {
                //Define a tabela atual
                esquemaTabelas[i] = new EsquemaTabela(tabEsquemaTabelas.Rows[i][2].ToString());
                //Pega as colunas
                tabEsquemaColunas = cBD.PegarEsquemaColunas(esquemaTabelas[i].NomeTabela);
                camposTabela = new CampoBD[tabEsquemaColunas.Rows.Count];
                //Laço para definir cada coluna
                for (int j = 0; j < tabEsquemaColunas.Rows.Count; j++)
                {
                    string nome = tabEsquemaColunas.Rows[j][3].ToString();
                    bool permiteNulo;
                    if (tabEsquemaColunas.Rows[j][6].ToString() == "NO")
                        permiteNulo = false;
                    else
                    {
                        permiteNulo = true;
                    }
                    //Define os tipos
                    System.Data.SqlDbType tipoBD = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType),
                        tabEsquemaColunas.Rows[j][7].ToString(), true);
                    Type tipo = PegarTipoColuna(tipoBD);
                    //Define a quantidade de linhas
                    int maxLenght = 0;
                    if (tabEsquemaColunas.Rows[j][8].GetType() == typeof(int))
                        maxLenght = (int)tabEsquemaColunas.Rows[j][8];

                    camposTabela[j] = new CampoBD(
                         i,
                         nome,
                         permiteNulo,
                         tipoBD,
                         tipo,
                         maxLenght,
                         TipoCampo.Comum
                        );
                }
                esquemaTabelas[i].Campos = camposTabela;
            }
            return esquemaTabelas;
        }
        /// <summary>
        /// Pega as relações de uma tabela e já as define em um esquema de tabela
        /// </summary>
        /// <param name="esquema">O esquema da tabela</param>
        public static void PegarColunasPkEUnique(EsquemaTabela[] esquemas)
        {
            ControladorBD cBD = new ControladorBD();
            System.Data.DataTable tbPkEUnique = cBD.LerT(
                @"SELECT
                i1.TABLE_NAME,
                i2.COLUMN_NAME,
                i1.CONSTRAINT_TYPE
            FROM
                INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
                ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME");
            DataView view = tbPkEUnique.DefaultView;

            for (int i = 0; i < esquemas.Length; i++)
            {
                view.RowFilter = "TABLE_NAME = '" + esquemas[i].NomeTabela + "'";
                ConfigurarPkEUnique(view, esquemas[i]);
            }
        }
        /// <summary>
        /// Pega as relações de uma tabela e já as define em um esquema de tabela
        /// </summary>
        /// <param name="esquema">O esquema da tabela</param>
        public static RelacaoBD[] PegarRelacoes(EsquemaTabela[] esquemas)
        {
            ControladorBD cBD = new ControladorBD();
            System.Data.DataTable tbRelacoes = cBD.LerT(@"SELECT
    K_Table = FK.TABLE_NAME,
    FK_Column = CU.COLUMN_NAME,
    PK_Table = PK.TABLE_NAME,
    PK_Column = PT.COLUMN_NAME,
    Constraint_Name = C.CONSTRAINT_NAME
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
    ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
            SELECT
                i1.TABLE_NAME,
                i2.COLUMN_NAME
            FROM
                INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
                ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
            WHERE
                i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
           ) PT
    ON PT.TABLE_NAME = PK.TABLE_NAME");

            RelacaoBD[] relacoes = new RelacaoBD[tbRelacoes.Rows.Count];
            for (int i = 0; i < relacoes.Length; i++)
            {
                relacoes[i] = new RelacaoBD(
                            (string)tbRelacoes.Rows[i][0],
                            (string)tbRelacoes.Rows[i][1],
                            (string)tbRelacoes.Rows[i][2],
                            (string)tbRelacoes.Rows[i][3],
                            (string)tbRelacoes.Rows[i][4]);
            }
            return relacoes;
        }