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. As tecnologias 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 tabelaCustomers
. Isso significa que o métodoFindBy
gerado éFindByCustomerID
. O exemplo mostra como atribuir um DataRow específico a uma variável usando o método geradoFindBy
.
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.
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.
Acessar registros relacionados
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 tabelaCustomers
.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 tabelaOrders
:
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 tabelaCustomers
: