Share via


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. 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 tabla Customers. Esto significa que el método FindBy generado es FindByCustomerID. En el ejemplo se muestra cómo asignar un elemento DataRow específico a una variable mediante el método FindBy generado.

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

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.

    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");
    }
    

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.

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

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 tabla Customers.

  • 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 tabla Orders:

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

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 tabla Customers:

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