Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] VB.NET - Populando o controle TreeView com tabelas e

Recommended Posts

Em meu artigo "VB.NET - Populando o controle TreeView com tabelas e colunas do MS Access", eu mostrei como preencher o controle TreeView com tabelas e colunas de um banco de dados MS Access. Chegou a hora de fazer a mesma coisa com o SQL Server.

Eu sugiro duas opções para realizar esta tarefa: uma usando uma consulta SQL, e a outra obtendo as informações de um arquivo XML através da classe XMLDataDocument.

Abra o Visual Basic 2010 Express Edition, clique em New Project e selecione o template Windows Forms Application, informando o nome Tvw_SQLServer, e clique em OK:

44209.jpg

No formulário "form1.vb" do projeto, inclua, a partir da ToolBox, um controle TreeView (name=tvwDados) e um controle ImageList (name= Imgl). A seguir, no controle ImageList, clique na propriedade Images e inclua três imagens que serão usadas para diferenciar os níveis dos nós do controle TreeView, visto que teremos três níveis de nós (nodes): root, tabelas e colunas. Para isso, utilize a janela do Images Collection Editor, e clicando no botão Add, inclua três imagens a seu gosto, conforme a figura abaixo:

44210.gif

A seguir, no controle TreeView, atribua à propriedade ImageList o nome Imgl do controle acima. Vamos incluir, também, quatro controles Buttons, um Label e um OpenFileDialog no formulário fom1.vb:

  • btnPopular - Preenche o controle TreeView com os dados;
  • btnRetrair - Retrai todos os nós da árvore;
  • btnExpandir - Expande todos os nós da árvore;
  • btnSair - Encerra a aplicação;
  • OpenFileDialog - name= ofd1 - Exibe a caixa de diálogo "Abrir arquivo" para selecionar o arquivo .mdf;
  • Label = lblTabelas - Exibe a quantidade de tabelas no banco de dados.

Conforme o leiaute da figura abaixo:

44211.gif

Definindo o código do projeto

  1. O namespace usado no formulário para acessar as classes do provedor para o SQL Server é Imports System.Data.SqlClient. No início do formulário, vamos definir a variável nomeArquivo, que irá receber o nome do arquivo SQL Server: Dim nomeArquivo As String.
  2. Código do evento Click do botão Exibir:
 Private Sub btnPopular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPopular.Click

 

Dim arquivoSQLServer As OpenFileDialog = New OpenFileDialog()

arquivoSQLServer.InitialDirectory = "c:\dados\"

Dim caminho As DialogResult

Dim caminhoArquivo As String

 

arquivoSQLServer.Title = "Escolher Arquivo"

arquivoSQLServer.FileName = "Nome Arquivo"

arquivoSQLServer.Filter = "Arquivos SQL Server (*.mdf)|*.mdf"

caminho = arquivoSQLServer.ShowDialog

caminhoArquivo = arquivoSQLServer.FileName

 

If caminhoArquivo = Nothing Then

MessageBox.Show("Arquivo Invalido", "Abrir Arquivo", MessageBoxButtons.OK)

Else

nomeArquivo = Path.GetFileName(caminhoArquivo)

popularTreeView(nomeArquivo.Replace(".MDF", ""))

btnRetrair.Enabled = True

btnExpandir.Enabled = True

End If

End Sub

O código define algumas propriedades do controle OpenFIleDialog e chama a rotina popularTreeview, passando o caminho do arquivo selecionado.

  • InitialDirectory - Representa o diretório a ser exibido quando a janela de diálogo aparecer pela primeira vez;
  • Title - Usada para definir ou atribuir um título a janela de diálogo;
  • Filter - Representa o filtro da janela de diálogo que será usado para filtrar o tipo de arquivos que serão carregados durante a localização;
  • FileName - Representa o nome do arquivo selecionado na janela de diálogo.

Naturalmente, você terá que pedir permissão para acessar o SQL Server. O código da rotina popularTreeView() é mostrado a seguir:

 Private Sub popularTreeView(ByVal DBSQLServer As String)

 

'define os objetos ADO .NET para acessar o SQL Server

Dim conexaoSQLServer As SqlConnection = Nothing

Dim cmd As SqlCommand

Dim da As New SqlDataAdapter

Dim ds As New DataSet

 

'define a string de conexão

Dim strCon As String = "Data Source= .\SQLEXPRESS;Initial Catalog=" & DBSQLServer & ";Integrated Security=True"

 

'define a consulta para obter as tabelas e suas colunas

Dim sqlConsulta As String = "SELECT TABLE_NAME, COLUMN_NAME " +

"FROM information_schema.columns " +

"ORDER BY TABLE_NAME, COLUMN_NAME"

 

'define os nodes que iremos usar no treeview

Dim NoRaiz As TreeNode = Nothing

Dim NoPrincipal As TreeNode = Nothing

Dim NoFilho As TreeNode = Nothing

 

'define algumas constanes e variaveis usadas

Dim nomePrincipal As String = String.Empty

Dim nomeFilho As String = String.Empty

Dim BancoDados As String = DBSQLServer

 

Try

'define e abre a conexão com o SQL Server

conexaoSQLServer = New SqlConnection(strCon)

conexaoSQLServer.Open()

 

'atribui o comando usado na conexão

cmd = New SqlCommand(sqlConsulta, conexaoSQLServer)

da.SelectCommand = cmd

 

'preenche o dataset

da.Fill(ds, "Dados_Sistema")

 

tvwDados.Nodes.Clear()

'inclui o node raiz

NoRaiz = tvwDados.Nodes.Add(key:="Root", text:=BancoDados, imageIndex:=0, selectedImageIndex:=0)

 

Dim contaTabelas as Integer

For Each row As DataRow In ds.Tables("Dados_Sistema").Rows

 

If nomePrincipal <> row(0).ToString Then

NoPrincipal = NoRaiz.Nodes.Add(key:="Table", text:=row(0).ToString, imageIndex:=1, selectedImageIndex:=1)

nomePrincipal = row(0).ToString

contaTabelas += 1

End If

'define os nós filhos

NoFilho = NoPrincipal.Nodes.Add(key:="Column", text:=row(1).ToString, imageIndex:=2, selectedImageIndex:=2)

 

Next

 

lblTabelas.Text = contaTabelas.ToString & " Tabelas no arquivo"

 

tvwDados.Nodes(0).EnsureVisible()

 

Catch ex As Exception

MessageBox.Show("Erro ao realizar a operação com o arquivo : " & ex.Message)

Exit Sub

Finally

'libera os recursos da conexão usada

conexaoSQLServer.Close()

conexaoSQLServer.Dispose()

conexaoSQLServer = Nothing

End Try

 

End Sub

A consulta SQL usada para retornar as tabelas e suas colunas usa a view INFORMATION_SCHEMA.COLUMNS para obter o nome das tabelas e colunas do SQL Server.

Essa view contém uma linha para cada coluna acessível para o atual usuário no banco de dados atual. A view INFORMATION_SCHEMA.COLUMNS é baseada nas tabelas do sistema nosysobjects, type_info spt_data, systypes, syscolumns, syscomments, sysconfigures e syscharsets.

Abaixo vemos o resultado da consulta executada no SQL Server Management Studio:

44214.gif

Vamos usar essa view para obter as tabelas e as consultas do banco de dados. O código do evento Click do botão Expandir:

Private Sub btnExpandir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExpandir.Click

'expande todos os nós

tvwDados.ExpandAll()

End Sub

O método ExpandAll() expande todos os nodes.

 

O código do evento Click do botão Retrair:

Private Sub btnRetrair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRetrair.Click

'retrai todos os nós

tvwDados.CollapseAll()

End Sub

O método CollapseAll() retrai todos os nodes.

 

O código do evento Click do botão Sair:

 Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click

Dim resultado As DialogResult = MessageBox.Show("Deseja encerrar a aplicação ?", _

"Encerrar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)

 

If resultado = DialogResult.Yes Then

Application.Exit()

End If

 

End Sub

Executando o projeto ao clicar no botão Exibir, teremos a caixa de diálogo "Abrir arquivo" aberta para selecionarmos o arquivo SQL Server:

44216.gif

Após selecionar o arquivo, o controle é preenchido com os nomes das tabelas e suas colunas:

44217.gif

Para obter o nó selecionado no controle TreeView, nós usamos o evento AfterSelect, pois o evento Click do controle retorna apenas o nó anterior selecionado.

No código usamos as propriedades e.Node e SelectedNode para obter o nó selecionado:

Private Sub tvwDados_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvwDados.AfterSelect

 

'obtem o item selecionado

Dim itemSelecionado As String = tvwDados.SelectedNode.ToString

'remove a string TreeNode

itemSelecionado = itemSelecionado.Replace("TreeNode: ", "")

 

'verifica se o item é nulo

If (e.Node.Parent IsNot Nothing) Then

'verifica o tipo do no

If (e.Node.Parent.GetType() Is GetType(TreeNode)) Then

If e.Node.Parent.Text = nomeArquivo Then

'mostra o nome da tabela e da coluna selecionada

MessageBox.Show(e.Node.Parent.Text + "." + itemSelecionado)

Else

'mostra so o nome da tabela

MessageBox.Show(itemSelecionado)

End If

 

End If

End If

 

End Sub

Executando o projeto e selecionando um nó com o mouse iremos obter :

44220.gif

Pegue projeto completo aqui: Tvw_SQLServer.zip

 

http://imasters.com.br/artigo/23422/dotnet/vbnet-populando-o-controle-treeview-com-tabelas-e-colunas-do-sql-server

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.