Consulta de conjuntos de datos en aplicaciones de .NET Framework
Nota:
Los conjuntos de datos y las clases relacionadas son tecnologías heredadas de .NET Framework de principios de la década de 2000 que permiten a las aplicaciones trabajar con datos en memoria mientras están desconectadas de la base de datos. Las tecnologías son especialmente útiles para las aplicaciones que permiten a los usuarios modificar los datos y conservar los cambios en la base de datos. Aunque los conjuntos de datos han demostrado ser una tecnología de gran éxito, se recomienda que las nuevas aplicaciones de .NET usen Entity Framework Core. Entity Framework proporciona una manera más natural de trabajar con datos tabulares como modelos de objetos y tiene una interfaz de programación más sencilla.
Para buscar registros específicos en un conjunto de datos, use el método FindBy
en DataTable, escriba su propia instrucción foreach para recorrer en bucle la colección Rows de la tabla o use LINQ to DataSet.
Distinción entre mayúsculas y minúsculas del conjunto de datos
Dentro de un conjunto de datos, los nombres de tabla y columna no distinguen mayúsculas de minúsculas de forma predeterminada; es decir, una tabla de un conjunto de datos denominado "Clientes" también se puede denominar "Clientes". Esto coincide con las convenciones de nomenclatura de muchas bases de datos, incluidas las de SQL Server. En SQL Server, el comportamiento predeterminado es que los nombres de los elementos de datos no se pueden distinguir solo por mayúsculas y minúsculas.
Nota
A diferencia de los conjuntos de datos, los documentos XML distinguen mayúsculas de minúsculas, por lo que los nombres de los elementos de datos definidos en esquemas distinguen mayúsculas de minúsculas. Por ejemplo, el protocolo de esquema permite que el esquema defina una tabla denominada Customers
y otra tabla denominada customers
. Esto puede provocar colisiones de nombres cuando se usa un esquema que contiene elementos que solo difieren por caso para generar una clase de conjunto de datos.
Sin embargo, la distinción entre mayúsculas y minúsculas puede ser un factor en la forma en que se interpretan los datos dentro del conjunto de datos. Por ejemplo, si filtra datos en una tabla de conjunto de datos, los criterios de búsqueda pueden devolver resultados diferentes en función de si la comparación distingue mayúsculas de minúsculas. Para controlar la distinción entre mayúsculas y minúsculas del filtrado, la búsqueda y la ordenación, establezca la propiedad CaseSensitive del conjunto de datos. Todas las tablas del conjunto de datos heredan el valor de esta propiedad de forma predeterminada. (Puede invalidar esta propiedad para cada tabla individual estableciendo la propiedad CaseSensitive de la tabla).
Búsqueda de una fila específica en una tabla de datos
Para buscar una fila en un conjunto de datos con tipo con un valor de clave principal
Para buscar una fila, llame al método
FindBy
fuertemente tipado que usa la clave principal de la tabla.En el ejemplo siguiente, la columna
CustomerID
es la clave principal de la tablaCustomers
. Esto significa que el métodoFindBy
generado esFindByCustomerID
. En el ejemplo se muestra cómo asignar un elemento DataRow específico a una variable mediante el métodoFindBy
generado.
Para buscar una fila en un conjunto de datos sin tipo con un valor de clave principal
Llame al método Find de una colección DataRowCollection y pase la clave principal como parámetro.
En el ejemplo siguiente se muestra cómo declarar una nueva fila denominada
foundRow
y asignarle el valor devuelto del método Find. Si se encuentra la clave principal, el contenido del índice de columna 1 se muestra en un cuadro de mensaje.
Búsqueda de filas por valores de columna
Para buscar filas basadas en los valores de cualquier columna
Las tablas de datos se crean con el método Select, que devuelve una matriz de DataRow en función de la expresión que se pasa al método Select. Para obtener más información sobre cómo crear expresiones válidas, consulte la sección "Sintaxis de expresión" de la página sobre la propiedad Expression.
En el ejemplo siguiente se muestra cómo usar el método Select de DataTable para buscar filas específicas.
Acceso a registros relacionados
Cuando las tablas de un conjunto de datos están relacionadas, un objeto DataRelation puede hacer que los registros relacionados estén disponibles en otra tabla. Por ejemplo, un conjunto de datos que contiene tablas Customers
y Orders
pueden estar disponibles.
Puede usar un objeto DataRelation para buscar registros relacionados llamando al método GetChildRows de DataRow en la tabla primaria. Este método devuelve una matriz de registros secundarios relacionados. O bien, puede llamar al método GetParentRow de DataRow en la tabla secundaria. Este método devuelve un único DataRow de la tabla primaria.
En esta página se proporcionan ejemplos de uso de conjuntos de datos con tipo. Para obtener información sobre cómo desplazarse por las relaciones en conjuntos de datos sin tipo, consulte Desplazamiento por objetos DataRelations.
Nota
Si trabaja en una aplicación de Windows Forms y usa las características de enlace de datos para mostrar datos, el formulario generado por el diseñador podría proporcionar suficiente funcionalidad para la aplicación. Para obtener más información, consulte Enlace de controles a los datos en Visual Studio. En concreto, consulte Relaciones en conjuntos de datos.
En los ejemplos de código siguientes se muestra cómo desplazarse por las relaciones ascendentes y descendentes en conjuntos de datos con tipo. Los ejemplos de código usan DataRow (NorthwindDataSet.OrdersRow
) y los métodos FindByPrimaryKey (FindByCustomerID
) generados para buscar la fila deseada y devolver los registros relacionados. Los ejemplos se compilan y se ejecutan correctamente solo si tiene:
Una instancia de un conjunto de datos denominado
NorthwindDataSet
con una tablaCustomers
.Una tabla
Orders
.Una relación denominada
FK_Orders_Customers
que relaciona las dos tablas.
Además, ambas tablas deben rellenarse con datos para que se devuelvan los registros.
Para devolver los registros secundarios de un registro primario seleccionado
Llame al método GetChildRows de una fila de datos específica
Customers
y devuelva una matriz de filas de la tablaOrders
:
Para devolver el registro primario de un registro secundario seleccionado
Llame al método GetParentRow de una fila de datos específica
Orders
y devuelva una sola fila de la tablaCustomers
: