Compartir a través de


Consulta de conjuntos de datos en aplicaciones de .NET Framework

Nota:

La DataSet clase y las clases relacionadas son tecnologías heredadas de .NET Framework de principios de los años 2000 que permiten a las aplicaciones trabajar con datos en memoria mientras las aplicaciones están desconectadas de la base de datos. Las tecnologías son especialmente útiles para las aplicaciones que permiten a los usuarios modificar datos y conservar los cambios de nuevo en la base de datos. Aunque los conjuntos de datos son una tecnología probada de éxito, el enfoque recomendado para las nuevas aplicaciones .NET es usar 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 FindBy método 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 entre mayúsculas y minúsculas de manera predeterminada; esto significa que una tabla de un conjunto de datos llamado "Clientes" puede referirse igualmente como "Clientes". Esto coincide con las convenciones de nomenclatura de muchas bases de datos, incluido 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 son sensibles a mayúsculas y minúsculas, por lo que los nombres de los elementos de datos definidos en esquemas también son sensibles a mayúsculas y 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 anular esta propiedad para cada tabla individual estableciendo la propiedad CaseSensitive de la tabla).

Buscar una fila específica en una tabla de datos

Para buscar una fila en un conjunto de datos tipado con un valor de clave principal

  • Para buscar una fila, llame al método con tipado fuerte FindBy que usa la clave principal de la tabla.

    En el ejemplo siguiente, la CustomerID columna es la clave principal de la Customers tabla. Esto significa que el método generado FindBy es FindByCustomerID. En el ejemplo se muestra cómo asignar un elemento específico DataRow a una variable mediante el método generado FindBy .

    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 Find método de una DataRowCollection colección 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 Find método . 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");
    }
    

Buscar filas por valores de columna

Para buscar filas basadas en los valores de cualquier columna

  • Las tablas de datos se crean con el Select método , que devuelve una matriz de DataRows basada en la expresión pasada al Select método . Para obtener más información sobre cómo crear expresiones válidas, vea la sección "Sintaxis de expresión" de la página sobre la Expression propiedad .

    En el ejemplo siguiente se muestra cómo usar el Select método 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 DataRelation objeto puede hacer que los registros relacionados estén disponibles en otra tabla. Por ejemplo, un conjunto de datos que contiene Customers y Orders tablas puede estar disponible.

Puede usar un DataRelation objeto para buscar registros relacionados llamando al método GetChildRows de DataRow de 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.

Esta página proporciona ejemplos de conjuntos de datos tipados. Para obtener información sobre cómo navegar por las relaciones en conjuntos de datos sin tipo, vea Navegar por 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, vea Enlazar controles a datos en Visual Studio. En concreto, consulte Relaciones en conjuntos de datos.

En los ejemplos de código siguientes se muestra cómo navegar y descender las relaciones jerárquicas en conjuntos de datos tipados. Los ejemplos de código utilizan elementos tipificados DataRows (NorthwindDataSet.OrdersRow) y los métodos FindByPrimaryKey (FindByCustomerID) generados para localizar una fila deseada y devolver los registros relacionados. Los ejemplos se compilan y se ejecutan correctamente solo si tiene:

  • Instancia de un conjunto de datos denominado NorthwindDataSet con una Customers tabla.

  • Una tabla Orders.

  • Una relación denominada FK_Orders_Customers 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);