private void lvObjetosBanco_MouseClick(object sender, MouseEventArgs e)
        {
            var retorno = lvObjetosBanco.HitTest(e.X, e.Y);

            if (retorno.SubItem != null)
            {
                if (retorno.SubItem.Text == "Tabela" || retorno.SubItem.Text == "View" || retorno.SubItem.Text == "Procedure")
                {
                    using (var frm = new frmMapeamentoUnitario())
                    {
                        frm.Gerador = Gerador;
                        frm.DadosLogin = User;
                        frm.BancoSelecionado = BancoSelecionado;
                        frm.Parametros = Parameters;
                        frm.IlObjetos = ilObjetos;
                        frm.NomeObjeto = retorno.Item.Text;
                        frm.TipoObjeto = retorno.SubItem.Text.ConvertToEnum<EDatabaseObjectType>();

                        if (_selectedObjects.Exists(o => o.Name == retorno.Item.Text))
                        {
                            frm.ObjetosSelecionado = _selectedObjects.FirstOrDefault(o => o.Name == retorno.Item.Text);
                        }

                        switch (frm.ShowDialog(this))
                        {
                            case DialogResult.Yes:
                                if (!_selectedObjects.Exists(o => o.Name == frm.ObjetosSelecionado.Name))
                                {
                                    _selectedObjects.Add(frm.ObjetosSelecionado);
                                    _imgObjetosMapeados.Add(new KeyValuePair<string, Image>(retorno.Item.Text, ilIcones.Images["cheked"]));
                                }
                                else
                                {
                                    _selectedObjects = _selectedObjects.Where(o => o.Name != retorno.Item.Text).ToList();
                                    _selectedObjects.Add(frm.ObjetosSelecionado);
                                }
                                break;
                            default:
                                _selectedObjects = _selectedObjects.Where(o => o.Name != retorno.Item.Text).ToList();
                                _imgObjetosMapeados = _imgObjetosMapeados.Where(o => o.Key != retorno.Item.Text).ToList();
                                lvObjetosBanco.Items[retorno.Item.Index].Checked = false;
                                break;
                        }
                    }
                }
            }
        }
        private void btnMapear_Click(object sender, EventArgs e)
        {
            if (!txtConsulta.Text.ContainsInsensitive("select"))
            {
                MessageBox.Show("O comando SQL deve iniciar com SELECT", Text, MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                return;
            }

            if (_parametros.Count > 0)
            {
                foreach (
                    var parametro in
                        _parametros.Where(parametro => parametro.ParameterValue == null && !parametro.DefaultNull))
                {
                    MessageBox.Show(string.Format("Parâmetro {0} não pode ser nulo", parametro.ParameterName), "Atenção",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                try
                {
                    for (var i = 0; i < dgParametros.Rows.Count; i++)
                    {
                        foreach (
                            var parametro in
                                _parametros.Where(
                                    parametro =>
                                        parametro.ParameterName == dgParametros.Rows[i].Cells[0].Value.ToString()))
                        {
                            parametro.ParameterValue = ((bool) dgParametros.Rows[i].Cells[1].Value)
                                ? null
                                : Convert.ChangeType(dgParametros.Rows[i].Cells[3].Value,
                                    dgParametros.Rows[i].Cells[3].ValueType);
                            parametro.ParameterDotNetType = ((bool) dgParametros.Rows[i].Cells[1].Value)
                                ? "object"
                                : dgParametros.Rows[i].Cells[3].ValueType.FullName.Replace("System.", "");
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            DadosLogin.DatabaseName = BancoSelecionado;

            List<ColumnInfo> colunas;

            try
            {
                colunas = Gerador.MapQuery(txtConsulta.Text.Trim(), _parametros.ToList(), DadosLogin);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            using (var frm = new frmMapeamentoUnitario())
            {
                frm.Gerador = Gerador;
                frm.DadosLogin = DadosLogin;
                frm.BancoSelecionado = BancoSelecionado;
                frm.Parametros = _parametros.ToList();
                frm.IlObjetos = IlObjetos;
                frm.TipoObjeto = EDatabaseObjectType.Query;
                frm.NomeObjeto = "Query";
                frm.Consulta = txtConsulta.Text.Trim();
                frm.Colunas = colunas;
                frm.button1.Enabled = false;
                frm.ShowDialog(this);

                ObjetoSelecionado = frm.ObjetosSelecionado;
            }
            Close();
        }