Hoje passei o dia em busca de soluções para fazer o SQL Dinâmico, pois não tenho nenhum idéia de como fazer o mesmo.. Depois de muita busca cheguei ao seguinte resultado (com ajuda de alguns amigos do DevBrasil):
1) Crie os controles:
- Crie um DropDownList para as tabelas (AutoPostBack=true OnSelectedIndexChanged="xxx" DataValueField="xxx" DataTextField="xxx").
- Crie um DropDownList para os campos (AutoPostBack=true OnSelectedIndexChanged="xxx" DataValueField="xxx" DataTextField="xxx")
- Crie um DropDownList para os operadores (AutoPostBack=true OnSelectedIndexChanged="xxx" DataValueField="xxx" DataTextField="xxx")
- Crie um TextBox para valor a ser digitado pelo usuário
- Crie um CustomValidator para validar o valor digitado
- Crie um CheckBoxList para os campos a serem exibidos no relatório
- Crie um CustomValidator para validar se algum campo foi escolhido para ser exibido no relatório
- Crie um botão para pesquisar
- Crie um GridView para exibir os dados
2) utilizar a consulta "SELECT Name as Tabela FROM SysObjects WHERE XType = 'U' AND Name <> 'dtproperties' AND Name <> 'sysdiagrams'" para preencher seu DropDown de tabelas
3) Ao selecionar a Tabela, utilizar a consulta abaixo para preencher o DropDownList e o CheckBoxList com os campos além de configurar os CustomValidatores de acordo com o tamanho e tipo de dados.
"SELECT C.Name AS Nome,
CASE WHEN C.Status = 128 THEN 1 ELSE 0 END AS AutoNumeracao,
C.IsNullable AS Obrigatorio,
C.Length AS Tamanho,
TYPE_NAME(C.xtype) AS Tipo
FROM SysObjects O
INNER JOIN SysColumns C ON O.id = C.id
WHERE O.xtype = 'U'
AND O.name = @NomeTabela
ORDER BY C.AutoVal DESC, C.IsNullable ASC, O.Name ASC"
4) Ao selecionar o campo,preencher o DropDownList com uma coleção de objetos seu (Operadores) de acordo com o tipo do campo.
5) ao digitar o valor e clicar no botão, criar uma consulta próxima da que eu colocarei abaixo, executa-la e preencher o grid:
"select + (foreach no CheckBoxList pegando os valores selecionados) +
" from " + ddlTabela.SelectedValue
"where " + ddlCampo.SelectedValue + " " + ddlOperado.SelectedValue + " " + txtValor.Text
E já comecei a por isso em prática...
Agora falta continuar a fazer isso. Hoje também peguei um Backup mais recente do banco, porém nele não tem as tabelas das quais eu estou utilizando (será que isso será um futuro problema? :S), e dei uma modificada na parte dos filtros, segue o print abaixo:
Nenhum comentário:
Postar um comentário