Escolar Documentos
Profissional Documentos
Cultura Documentos
NET
DR = cmd.ExecuteReader()
While DR.Read
MsgBox DR.Item(0)
End While
dr.Close()
conexao.Close()
End Sub
Utilizando DataSet
Para acessar o banco de dados, executar o comando SQL via DataAdapter, trazer os dados e preencher o DataSet
usamos o método Fill, que retorna as linhas de uma fonte de dados usando a declaração SELECT definida por uma
propriedade SelectCommand associada.
A principal característica do DataSet é totalmente trabalhar desconectado e você pode usar um DataSet para retornar
dados de um banco de dados e também para mover os dados de um DataSet para um banco de dados. Porém o próprio
DataSet não faz conexão alguma com o banco de dados, ele nem mesmo tem um objeto para realizar tal conexão. A
ligação entre o banco de dados e o DataSet é feita pelo objeto DataAdapter (Adaptador de dados). Abaixo uma
ilustração que procura mostrar a interação entre os objetos ADO.NET e o modelo desconectado com o DataSet.
Private Sub CarregaDataSet()
Dim strConn As String = "string de conexão"
Dim conn As New OleDbConnection(strConn)
Dim sql As String = "Select * from tblClientes Where cli_ID < 20"
DA.Fill(DS, "Clientes")
End Sub
A diferença entre DataReader e DataSet
Em se tratando de acesso a dados em VB.Net e ASP.Net temos duas, DataSet e DataReader. Mas em relação ao
desempenho?
Quando falamos de desempenho, a utilização de um DataReader leva vantagem, pois obtem o acesso aos dados assim
que o objeto fica disponível, do contrário do DataSet que é necessário aguardar seu preenchimento, além disso o
DataReader é do tipo ForwardOnly (dados somente leitura e com acesso do primeiro registro até o último). Já o DataSet
você pode navegar pelos dados tanto para frente como para trás.
Vantagens entre DataReader e DataSet
A seguir temos um código que preenche um DataSet com o resultado de uma tabela e exibe o primeiro campo em cada
linha:
Dim conn As New SqlConnection(connectionString)
Dim da As New SqlDataAdapter("select * from tabela;", conn)
Dim dr As DataRow
For Each dr In ds.Tables(0).Rows
Console.WriteLine(dr(0).ToString())
Next dr
Observando o código você pode notar que a leitura dos dados feita no loop for each começa somente após o DataSet ter
sido preenchido. Você não pode realizar outra tarefa enquanto o DataSet estiver sendo preenchido.
Vamos ver agora o código que realiza a mesma tarefa usando um DataReader:
Dim con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand("select * from tabela", con)
cmd.Connection.Open()
While dr.Read()
Console.WriteLine(dr.GetString(0))
End While
dr.Close()
con.Close()
Neste caso a leitura dos dados é feita assim que os dados estiverem disponíveis, onde dr.Read() retorna false se não
encontrar dados. O DataReader armazena um resultado por vez no cliente, e com isto reduz o uso de memória e
recursos do sistema.
Então usar um DataReader é mais rápido que usar um DataSet, Certo? A resposta é sim... depende.
Lembre-se de que ao escolher usar um DataReader somente olhando a questão do desempenho irá fazer com que você
não tenha acesso a algumas funcionalidades iguais ao do DataSet, por exemplo a filtragem de dados.
A única justificativa no uso do DataReader seria para popular dados "somente leitura" (forward only), por exemplo para
popular um DataGrid ou um Relatório.
Você pode aumentar o desempenho de um DataSet desativando algumas funcionalidades, se não utilizadas:
1.º ds.EnforceConstraints = false - desabilita a verificação das restrições de integridade referencial durante a operação e
pode tornar a operação mais rápida.
2.º
3.º
4.º Executamos o método BeginLoadData antes de usar o método Fill para desabilitar a notificação, indexação. E
depois executamos o método EndLoadData depois de usar o método Fill para habilitar a indexação a notificação.
ds.Tables.Add("tblClientes");
ds.Tables["tblClientes"].BeginLoad