Compartilhar via


Consultar conjuntos de dados em aplicativos do .NET Framework

Observação

Os conjuntos de dados e as classes relacionadas são tecnologias herdadas do .NET Framework do início dos anos 2000 que permitem que os aplicativos trabalhem com dados na memória enquanto os aplicativos estão desconectados do banco de dados. Eles são bastante úteis em aplicativos que permitem que os usuários modifiquem dados e persistam as alterações no banco de dados. Embora os conjuntos de dados tenham se mostrado uma tecnologia muito bem-sucedida, é recomendado que os novos aplicativos .NET usem o Entity Framework Core. O Entity Framework proporciona uma forma mais natural de trabalhar com dados tabulares como modelos de objeto e conta com uma interface de programação mais simples.

Para pesquisar registros específicos em um conjunto de dados, use o método FindBy na DataTable, escreva sua própria instrução foreach para executar um loop na coleção Rows da tabela ou use LINQ to DataSet.

Diferenciação de maiúsculas e minúsculas do conjunto de dados

Em um conjunto de dados, os nomes de tabela e coluna não diferenciam maiúsculas de minúsculas por padrão, ou seja, uma tabela em um conjunto de dados chamada "Clientes" também pode ser chamada de "Clientes". Isso corresponde às convenções de nomenclatura de muitos bancos de dados, incluindo o SQL Server. No SQL Server, o comportamento padrão é que os nomes dos elementos de dados não podem ser diferenciados apenas por maiúsculas e minúsculas.

Observação

Ao contrário dos conjuntos de dados, os documentos XML diferenciam maiúsculas de minúsculas, portanto, os nomes dos elementos de dados definidos em esquemas diferenciam maiúsculas de minúsculas. Por exemplo, o protocolo de esquema permite que o esquema defina uma tabela chamada Customers e uma tabela diferente chamada customers. Isso pode resultar em colisões de nome quando um esquema que contém elementos que diferem apenas por caso é usado para gerar uma classe de conjunto de dados.

No entanto, a diferenciação de maiúsculas e minúsculas pode ser um fator na forma 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 poderão retornar resultados diferentes dependendo de se a comparação diferencia maiúsculas de minúsculas. Você pode controlar a diferenciação de maiúsculas e minúsculas da filtragem, pesquisa e classificação definindo a propriedade CaseSensitive do conjunto de dados. Todas as tabelas do conjunto de dados herdam o valor dessa propriedade por padrão. (Você pode substituir essa propriedade para cada tabela definindo a propriedade CaseSensitive da tabela).

Localizar uma linha específica em uma tabela de dados

Para localizar uma linha em um conjunto de dados tipado com um valor de chave primária

  • Para localizar uma linha, chame o método fortemente tipado FindBy que usa a chave primária da tabela.

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

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

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

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

    O exemplo a seguir mostra como declarar uma nova linha chamada foundRow e atribuir a ela o valor retornado do método Find. Se a chave primária for encontrada, o conteúdo do índice da coluna 1 será 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");
    }
    

Localizar linhas por valores de coluna

Para localizar linhas com base nos valores de qualquer coluna

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

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

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

Quando as tabelas em um conjunto de dados estão relacionadas, um objeto DataRelation pode disponibilizar os registros relacionados em outra tabela. Por exemplo, um conjunto de dados que contém tabelas Customers e Orders pode ser disponibilizado.

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

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

Observação

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 poderá fornecer funcionalidade suficiente para seu aplicativo. Para obter mais informações, confira Associar controles a dados no Visual Studio. Especificamente, consulte Relações em conjuntos de dados.

Os exemplos de código a seguir demonstram como navegar para cima e para baixo nas relações em conjuntos de dados tipados. Os exemplos de código usam os métodos tipados DataRows (NorthwindDataSet.OrdersRow) e FindByPrimaryKey (FindByCustomerID) gerados para localizar uma linha desejada e retornar os registros relacionados. Os exemplos são compilados e executados corretamente somente se você tiver:

  • Uma instância de um conjunto de dados chamado NorthwindDataSet com uma tabela Customers.

  • Uma tabela Orders.

  • Uma relação chamada FK_Orders_Customers relacionando as duas tabelas.

Além disso, ambas as tabelas precisam ser preenchidas com os dados para que todos os registros sejam retornados.

Para retornar os registros filho de um registro pai selecionado

  • Chame o método GetChildRows de uma linha de dados específica Customers e retorne uma matriz de linhas da tabela Orders:

    string custID = "ALFKI";
    NorthwindDataSet.OrdersRow[] orders;
    
    orders = (NorthwindDataSet.OrdersRow[])northwindDataSet.Customers.
        FindByCustomerID(custID).GetChildRows("FK_Orders_Customers");
    
    MessageBox.Show(orders.Length.ToString());
    

Para retornar o registro pai de um registro filho selecionado

  • Chame o método GetParentRow de uma linha de dados específica Orders e retorne uma única linha da tabela Customers:

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