VB.NET - Verificando se existem dados


Como verificar se a execução de sua consulta a fonte de dados retornou registros ?

Essa é uma operação simples de ser feita , você pode usar :

Vamos mostrar um exemplo onde o código cria e preenche um objeto DataTable e usa a propriedade Count de DataRowCollection para determinar se a consulta usada para cria a tabela retorna dados.

Na sequência um DataReader será criado ; vamos usar a propriedade HasRows e o método Read() para determinar se o comando usado para criar o DataReader retornou linhas ou não

Crie um novo projeto no VS.NET to tipo Windows Application e insira um componente TextBox com propriedade Multiline definida como True e um botão de comando. 

Defina os seguintes imports no projeto:

Imports System.Data.oledb
Imports System.text

Defina a seguinte variável no seu projeto:

Private Const TABELA_ORDER As String = "Orders"

Agora insira o seguinte código do evento Click do botão de comando:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim result As StringBuilder = New StringBuilder
        Dim strConn As String
        Dim sql As String
        sql = "SELECT * FROM Orders"
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb"
        Dim da As OleDBDataAdapter = New OleDBDataAdapter(sql, strConn)
        Dim tbl As DataTable = New DataTable(TABELA_ORDER)
        'preenche o dataadapter
        Try
            da.Fill(tbl)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
            Exit Sub
        End Try
        Dim tabelaTemRegistros As Boolean = tbl.Rows.Count > 0
        If tabelaTemRegistros Then
            result.Append("DataTable(Count) " & TABELA_ORDER + " possui registros  " & Environment.NewLine & Environment.NewLine)
        Else
            result.Append("DataTable(Count) " & TABELA_ORDER + "  NÃO possui registros " & Environment.NewLine & _
 Environment.NewLine)

        End If
        Dim conn As OleDbConnection = New OleDbConnection(strConn)
        Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM ORDERS", conn)
        conn.Open()
        Dim orderReader As OleDbDataReader = cmd.ExecuteReader
        result.Append("DataReader(HasRows) " & TABELA_ORDER & " possui registros = " & orderReader.HasRows.ToString _
& Environment.NewLine & Environment.NewLine)
        Dim readerTemRegistros As Boolean = orderReader.Read
        If readerTemRegistros Then
            result.Append("DataReader(Read) " & TABELA_ORDER & " possui registros " & Environment.NewLine & Environment.NewLine)
        Else
            result.Append("DataReader(Read) " & TABELA_ORDER & " NÃO possui registros " & Environment.NewLine & Environment.NewLine)
        End If
        orderReader.Close()
        conn.Close()
        resultado.Text = result.ToString
    End Sub

Executando o projeto teremos:

O resultado acima exibe a utilização das propriedades Count, HasRows e do método Read() retornando valores para a tabela Orders do banco de dados Northwind.mdb.

O objeto DataTable contém um objeto DataRowCollection que contém todas os objetos DataRow em uma Tabela. A coleção DataRowCollection possui a propriedade Count que retorna o número de linhas em uma tabela. A propriedade Count para uma tabela vazia retorna o valor zero.

A propriedade HasRows de um DataReader retorna um valor Booleano indicando se o DataReader contém qualquer registro.

Outra forma é usar o método Read() para avançar no DataReader para o próximo registro. Ele retorna um valor True se o registro esta disponível ou False caso contrário. A primeira chamada ao método Read() irá indicar se qualquer registro foi retornado pelo DataReader.

Esta é a única forma de determinar se um DataReader contém qualquer registro antes da introdução do propriedade HasRows na versão 1.1 do .NET Framework

E tenho dito... Até mais ver...