VB2005 - Preenchendo um Array a partir de um DataReader
Embora o Visual Basic 2005 (leia-se .NET Framework 2.0) tenha trazido muitas novidades o código usado na versão anterior (.NET Framework 1.1) é totalmente compatível e roda sem problemas.
Este artigo se propõe a mostrar como você pode usar alguns dos novos recursos do VB2005 com alguns dos objetos clássicos do VB. Nele vou mostrar como você pode preencher um ArrayList com os dados obtidos de uma fonte de dados SQL Server 2005 usando uma stored procedure e exibir o conteúdo do ArrayList em um ListBox.
Para acompanhar este artigo você vai precisar ter os seguintes recursos instalados:
As tarefas que iremos realizar para completar o artigo são:
Criar um projeto do tipo Windows Application no VB2005
Criar uma base de dados chamada Estoque.mdf
Criar a tabela Produto com os seguintes campos: Codigo,Nome,Descricao,
Criar uma stored Procedure que receba um parâmetro de entrada inteiro
Efetuar a conexão com a fonte de dados e gerar um datareader
preencher um ArrayList com os dados do datareader
Exibir os dados em um ListBox
Embora simples, vimos que temos muita coisa a fazer e a aprender.
1- Inicie um novo projeto no VB 2005 com o nome de dtrArray. No formulário padrão inclua um controle ListBox e um controle Button conforme figura abaixo:
2- Clique com o botão direito do mouse sobre o nome do projeto e selecione Add -> New Item. Na janela Add New Item selecione : SQL DataBase e informe o nome Estoque.mdb
Este é um recurso novo, e, permite que você crie o banco de dados vinculado ao seu projeto.
Abra a janela DataBase Explorer e expanda os objetos do banco de dados Estoque.mdf. A seguir clique com o botão direito do mouse sobre o objeto Tables e selecione a opção - Add New Table
Será aberta a janela onde você deverá criar a estrutura da tabela informando o nome de campo e seu tipo de dados conforme figura abaixo:
Nota : O campo Codigo é do tipo int Identity com Identity Increment igual a 1 e identity Seed igual a 1.
Ao terminar salve a tabela com o nome Produto. Retornando ao DataBase Explorer você verá nos detalhes do objeto Table os campos criados.
Vamos incluir alguns dados na tabela Produto. Para isto Clique com o botão direito sobre o nome da tabela e selecione a opção - Show Table Data.(Fig 1.0). A seguir informe os dados digitando diretamente os valores em cada linha conforme abaixo (Fig. 2.0):
Fig 1.0 - Seleção para exibir dados | Fig. 2.0 - Digitando alguns dados na tabela |
Vamos agora criar uma stored Procedure em nossa base de dados. A stored procedure será chamada ProdutosCategoria e irá receber um parâmetro do tipo Inteiro correspondente ao código da categoria do produto efetuando assim a seleção somente dos produtos para esta categoria.
Para criar uma nova stored Procedure abra a janela DataBase Explorer e clique com o botão direito do mouse sobre o objeto Stored Procedures e selecione a opção : Add New Stored Procedure.
Na janela a seguir digite o código da stored procedure conforme abaixo. Onde @codigoCategoria é o parâmetro do tipo int que será informado.
Após salvar a stored Procedure a janela DataBase Explorer irá exibir os objetos criados conforme abaixo:
Já temos tudo pronto : o banco de dados , a tabela e a stored procedure. Vamos a código. Dando uma última espiada na estrutura do formulário e da solução iremos ver:
No evento Click do botão de comando - Button1 - do formulário inclua o seguinte código:
Private
Sub Button1_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click Dim traco As String = "#-------------------------------------------" Dim con As SqlConnection = New SqlConnection(My.Settings.ProdutosConnectionString)
Dim cmd As SqlCommand = New SqlCommand("ProdutosCategoria", con)
cmd.Parameters.Add(New SqlParameter("@codigoCategoria", SqlDbType.Int)).Value = 3
'preenche o
ArrayList com os valores do datareader Dim values(dr.FieldCount - 1) As Object dr.GetValues(values) arl.Add(values) End While
dr.Close() con.Close()
'Percorre os ArrayList e exibe os valores no ListBox For Each linha As Object() In arl For Each coluna As Object In linha ListBox1.Items.Add(coluna.ToString) Next ListBox1.Items.Add(traco) NextEnd Sub |
Note que estou usando o recurso My para obter a string de conexão :
Dim con As SqlConnection = New SqlConnection(My.Settings.ProdutosConnectionString)
O código define um objeto Command que faz referência a nossa stored Procedure criada; sendo que o parâmetro informado tem valor igual a 3, e, esta fixo no código. Com isto somente os produtos com categoria cujo código seja igual a 3 serão retornados.
Nota: O valor do parâmetro poderia ser fornecido dinamicamente mas por questão de simplicidade deixamos o valor fixo no código
Dim cmd As SqlCommand = New SqlCommand("ProdutosCategoria", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@codigoCategoria", SqlDbType.Int)).Value = 3
O resto do código esta comentado e é muito simples. O resultado final obtido será:
Desde que a conexão não pode ser usada até que o DataReader esteja fechado, lemos o conteúdo do mesmo para um array e então fechamos o DataReader. Desta forma podemos processar os dados no array enquanto a conexão pode ser usada para outras finalidades.
Pegue o projeto aqui : dtrArray.zip (Sem o banco de dados)
Até o próximo artigo...
referências:
-
ASP .NET - Usando um ArrayList - Como usar o
controle ArrayList. Propriedades básicas e exemplo.
- VB .NET -
Arrays. - Arrays no VB.NET o que mudou ? Propriedades , métodos ,
exemplos ; arrays de arrays , array de objetos.
- ADO.NET -
Obtendo quantos registros um DataReader/DataSet vai retornar
- VB.NET -
DataReader : preenchendo um ListView com dados
- ADO.NET -
DataSet x DataReader - Uma questão de desempenho ?
José Carlos Macoratti