Compartilhar via


Conjuntos de dados de consulta

 

Para procurar por registros específicos em um conjunto de dados, use o método FindBy na DataTable, ou você pode escrever seu próprio loop foreach sobre a coleção de linhas da tabela ou você pode usar LINQ to DataSet. LINQ to DataSet.

Sensibilidade de caso do conjunto de dados

Dentro de um conjunto de dados, nomes de tabela e coluna são por padrão de maiúsculas e minúsculas — ou seja, uma tabela em um conjunto de dados chamado "Clientes" também pode ser chamada como "customers". Isso coincide com as convenções de nomenclatura em vários bancos de dados, incluindo o comportamento padrão do SQL Server, onde os nomes dos elementos de dados não podem ser diferenciados apenas por caso.

Dica

Ao contrário de conjuntos de dados, documentos XML diferenciam maiúsculas de minúsculas, para que os nomes de elementos de dados definidos em esquemas diferenciam maiúsculas de minúsculas. Por exemplo, o protocolo de esquema permite que o esquema definir uma tabela chamada "Clientes" e uma tabela diferente chamada "clientes". Isso pode resultar em conflitos de nome quando um esquema que contém elementos que diferem somente no caso é usado para gerar uma classe de conjunto de dados.

No entanto, diferenciação de maiúscula e minúsculas pode ser um fator de como os dados são interpretados no conjunto de dados. Por exemplo, se você filtrar dados em uma tabela de conjunto de dados, os critérios de pesquisa podem retornar resultados diferentes dependendo se a comparação diferencia maiúsculas de minúsculas ou não. Você pode controlar as maiúsculas e minúsculas de filtragem, pesquisa e classificação definindo o conjunto de dados CaseSensitive propriedade. Todas as tabelas no dataset herdam o valor dessa propriedade por padrão. (Você pode substituir essa propriedade para cada tabela individual, definindo a tabela CaseSensitive propriedade.)

Para localizar uma linha específica em uma tabela de dados

Para localizar uma linha em um dataset digitado com um valor de chave primária

  • Chamar fortemente tipado FindBy método que usa a chave primária da tabela para localizar uma linha.

    No exemplo a seguir, o CustomerID coluna é a chave primária da Customers tabela isso gerado FindBy método é FindByCustomerID. O exemplo mostra como atribuir um determinado DataRow a uma variável usando gerado FindBy método.

                NorthwindDataSet.CustomersRow customersRow = 
                    northwindDataSet1.Customers.FindByCustomerID("ALFKI");
    
            Dim customersRow As NorthwindDataSet.CustomersRow
            customersRow = NorthwindDataSet1.Customers.FindByCustomerID("ALFKI")
    

Para localizar uma linha em um dataset não tipado com um valor de chave primária

  • Chamar o Find método de um DataRowCollection coleção, passando a chave primária como um parâmetro.

    O exemplo a seguir mostra como declarar uma nova linha chamada foundRow e atribua a ela o valor de retorno de Find método. Se a chave primária for encontrada, o conteúdo do índice da coluna 1 é exibido em uma caixa de mensagem.

                string s = "primaryKeyValue";
                DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s);
    
                if (foundRow != null) 
                {
                    MessageBox.Show(foundRow[0].ToString());
                }
                else
                {
                    MessageBox.Show("A row with the primary key of " + s + " could not be found");
                }
    
            Dim s As String = "primaryKeyValue"
            Dim foundRow As DataRow = DataSet1.Tables("AnyTable").Rows.Find(s)
    
            If foundRow IsNot Nothing Then
                MsgBox(foundRow(1).ToString())
            Else
                MsgBox("A row with the primary key of " & s & " could not be found")
            End If
    

Localizando linhas por valores de coluna

Para localizar linhas com base nos valores em qualquer coluna

  • Tabelas de dados são criadas com um Select método que retorna uma matriz de DataRows com base na expressão passada para o Select método. Para obter mais informações sobre como criar expressões válidas, consulte a seção "Sintaxe de expressões" da página a Expression propriedade.

    O exemplo a seguir mostra como usar o Select método o DataTable para localizar linhas específicas.

                DataRow[] foundRows;
                foundRows = dataSet1.Tables["Customers"].Select("CompanyName Like 'A%'");
    
            Dim foundRows() As Data.DataRow
            foundRows = DataSet1.Tables("Customers").Select("CompanyName Like 'A%'")
    

Acessando registros relacionados

Quando tabelas em um dataset estão relacionadas, um DataRelation objeto pode tornar disponíveis os registros relacionados em outra tabela. Por exemplo, um conjunto de dados que contém Customers e Orders tabelas podem ser disponibilizadas.

Você pode usar um DataRelation objeto para localizar registros relacionados chamando o GetChildRows método de um DataRow na tabela pai; esse método retorna uma matriz de registros filho relacionados. Ou você pode chamar o GetParentRow método de um DataRow na tabela filho; esse método retorna uma única DataRow da tabela pai.

Esta página de Ajuda fornece exemplos usando datasets tipados. Para obter informações sobre navegar em relações em datasets não tipados, consulte Navegando em DataRelations.

Dica

Se você estiver trabalhando em um aplicativo Windows Forms e usando os recursos de associação de dados para exibir dados, o formulário gerado pelo designer pode fornecer funcionalidade suficiente para seu aplicativo. Para obter mais informações, consulte as páginas no Associar controles a dados no Visual Studio, especificamente Como exibir dados relacionados em um Aplicativo do Windows Forms e Instruções passo a passo: exibindo dados relacionados em um Windows Form.

Os exemplos de código a seguir demonstram navegando para cima e para relações em datasets tipados. Eles use tipado DataRows (NorthwindDataSet.OrdersRow) e gerado FindByPrimaryKey (FindByCustomerID) métodos para localizar uma linha desejada e retornar os registros relacionados. Os exemplos compilam e executam corretamente somente se você tiver:

  • Uma instância de um dataset chamado NorthwindDataSet com um Customers tabela

  • Um Orders tabela

  • Uma relação nomeada FK_Orders_Customers relacionando as duas tabelas disponíveis ao escopo do seu código

Além disso, ambas as tabelas precisam ser preenchidas com dados para quaisquer registros a serem retornados.

Para retornar os registros de um registro pai selecionado filho

  • Chamar o GetChildRows método de um determinado Customers dados de linha e retornar uma matriz de linhas do Orders tabela:

                string custID = "ALFKI";
                NorthwindDataSet.OrdersRow[] orders;
    
                orders = (NorthwindDataSet.OrdersRow[])northwindDataSet.Customers.
                    FindByCustomerID(custID).GetChildRows("FK_Orders_Customers");
    
                MessageBox.Show(orders.Length.ToString());
    
            Dim customerID As String = "ALFKI"
            Dim orders() As NorthwindDataSet.OrdersRow
    
            orders = CType(NorthwindDataSet.Customers.FindByCustomerID(customerID).
                GetChildRows("FK_Orders_Customers"), NorthwindDataSet.OrdersRow())
    
            MessageBox.Show(orders.Length.ToString())
    

Para retornar o registro pai de um registro filho selecionado

  • Chamar o GetParentRow método de um determinado Orders dados de linha e retornar uma única linha do Customers tabela:

                int orderID = 10707;
                NorthwindDataSet.CustomersRow customer;
    
                customer = (NorthwindDataSet.CustomersRow)northwindDataSet.Orders.
                    FindByOrderID(orderID).GetParentRow("FK_Orders_Customers");
    
                MessageBox.Show(customer.CompanyName); 
    
            Dim orderID As Integer = 10707
            Dim customer As NorthwindDataSet.CustomersRow
    
            customer = CType(NorthwindDataSet.Orders.FindByOrderID(orderID).
                GetParentRow("FK_Orders_Customers"), NorthwindDataSet.CustomersRow)
    
            MessageBox.Show(customer.CompanyName)