Partilhar via


Consultar conjuntos de dados em aplicativos .NET Framework

Observação

A DataSet classe 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. As tecnologias são especialmente úteis para aplicativos que permitem aos usuários modificar dados e manter as alterações de volta ao banco de dados. Embora os conjuntos de dados sejam uma tecnologia comprovadamente bem-sucedida, a abordagem recomendada para novos aplicativos .NET é usar o Entity Framework Core. O Entity Framework fornece uma maneira mais natural de trabalhar com dados tabulares como modelos de objeto e tem uma interface de programação mais simples.

Para pesquisar registos específicos num conjunto de dados, utilize o método FindBy no DataTable, escreva a sua própria instrução foreach para fazer um loop sobre a coleção Rows da tabela ou use LINQ to DataSet.

Sensibilidade a maiúsculas e minúsculas de conjuntos de dados

Dentro de um conjunto de dados, os nomes de tabelas e colunas não diferenciam maiúsculas de minúsculas por padrão; isto é, uma tabela num conjunto de dados chamada "Clientes" pode ser referida como "clientes". Isto está de acordo com as convenções de nomenclatura em muitos sistemas de gestão de bases 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 pela capitalização.

Observação

Ao contrário dos conjuntos de dados, os documentos XML são sensíveis a maiúsculas e minúsculas, portanto, os nomes dos elementos de dados definidos nos esquemas também o são. 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 conflitos de nomes quando é utilizado um esquema com elementos que diferem apenas por maiúsculas e minúsculas para a geração de uma classe de conjunto de dados.

A sensibilidade a maiúsculas e minúsculas, no entanto, pode ser um fator na interpretação dos dados no conjunto de dados. Por exemplo, se filtrar dados numa tabela de base de dados, os critérios de pesquisa poderão retornar resultados diferentes, dependendo de a comparação ser sensível a maiúsculas e minúsculas. Você pode controlar a sensibilidade a maiúsculas e minúsculas na filtragem, pesquisa e classificação definindo a propriedade do conjunto de dados CaseSensitive. Todas as tabelas no conjunto de dados herdam o valor dessa propriedade por padrão. (Você pode substituir essa propriedade para cada tabela individual definindo a propriedade da CaseSensitive tabela.)

Localizar uma linha específica numa 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 tipado explicitamente FindBy que utiliza a chave primária da tabela.

    No exemplo a seguir, a CustomerID coluna é a chave primária da Customers tabela. Isso significa que o método gerado FindBy é FindByCustomerID. O exemplo mostra como atribuir um específico DataRow 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 sem tipo com um valor de chave primária

  • Chame o Find método de uma 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 atribuir-lhe o valor de retorno do Find método. Se a chave primária for encontrada, o conteúdo do índice de 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 em qualquer coluna

  • As tabelas de dados são criadas com o 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 da expressão" da página sobre a Expression propriedade.

    O exemplo a seguir mostra como usar o Select método 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 DataRelation objeto pode disponibilizar os registros relacionados em outra tabela. Por exemplo, um conjunto de dados contendo tabelas Customers e Orders pode ser disponibilizado.

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

Esta página fornece exemplos usando conjuntos de dados digitados. Para obter informações sobre como navegar em relações em conjuntos de dados sem tipo, consulte Navegando DataRelations.

Observação

Se você estiver trabalhando em um aplicativo do Windows Forms e usando os recursos de vinculaçã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 Vincular 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 em relacionamentos em conjuntos de dados tipados. Os exemplos de código utilizam as variáveis tipadas DataRow(NorthwindDataSet.OrdersRow) e os métodos FindByPrimaryKey (FindByCustomerID) gerados para localizar uma linha desejada e devolver os registos relacionados. Os exemplos compilam e executam corretamente somente se você tiver:

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

  • Uma Orders tabela.

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

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

Para retornar os registros filho de um registro pai selecionado

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

    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 GetParentRow método de uma linha de dados específica Orders e retorne uma única linha da Customers tabela:

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