Share via


Cómo buscar con la clase SqlCeDataReader (mediante programación)

En este tema se describe cómo efectuar búsquedas con SqlCeDataReader.

Buscar en un índice

El método Seek del objeto SqlCeDataReader permite buscar rápidamente filas en un conjunto de resultados (o cursor). En la búsqueda se puede especificar tanto el intervalo del índice en el que se tiene que buscar como el modo de selección de las filas. Para buscar, se debe especificar la propiedad IndexName en el objeto SqlCeCommand.

Establecer el intervalo del índice

El método SetRange del objeto SqlCeCommand especifica el intervalo del índice en el que se debe buscar. Los intervalos suelen especificarse mediante valores de inicio y final de índice y opciones de intervalo. Dichas opciones se definen mediante la enumeración DbRangeOptions. Si no se especifica ninguna opción de intervalo, este incluirá de forma predeterminada tanto el valor inicial como el final. Si se establece una opción de intervalo de DbRangeOptions.Match, el intervalo solo incluirá filas en las que los valores del índice coincidan con el valor startData. Si se establece una opción de intervalo de DbRangeOptions.Prefix, el intervalo incluirá todas las filas en las que los valores del índice empiecen por el valor startData. Si se utiliza Match o Prefix, el valor final debe establecerse en NULL. Para obtener más información, vea el tema "Enumeración DbRangeOptions" en la referencia de la biblioteca de clases de .NET Framework.

Opciones de búsqueda

Las opciones de búsqueda especifican cómo seleccionar filas en un índice. Las opciones como FirstEqual, LastEqual, BeforeEqual y AfterEqual, con Equal en sus nombres, seleccionan filas que coinciden con el valor de búsqueda. Si ninguna de las filas del índice coincide con el valor de búsqueda, se seleccionará una fila anterior, en el caso de FirstEqual y BeforeEqual, o posterior, en el caso de AfterEqual y LastEqual. Para obtener más información, vea el tema "Enumeración DbSeekOptions" en la referencia de la biblioteca de clases de .NET Framework.

Ejemplo

En el ejemplo siguiente se muestra la ejecución del método Seek en un índice de tres columnas en el que los tipos de datos de las columnas son integer, datetime y money. El intervalo para el índice integer es de 1 a 5, ambos incluidos. Los intervalos de índices para las columnas datetime y money empiezan en 1/1/1996 y $10.00, respectivamente. En este ejemplo se selecciona una fila en la que el valor de la columna integer es 1, el de datetime es 1/1/1997 y el de money es $10,50. Si no existe ningún índice que cumpla los criterios, la propiedad AfterEqual hace que se seleccione la siguiente fila del índice.

Nota

El código siguiente utiliza el tipo de comandos TableDirect. Si se usa TableDirect con SQL Server Compact, no se pueden combinar tablas.

// Example that seeks on a three-column index
public void CreateMySqlCeCommand(SqlCeConnection conn) 
{
    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandType  = CommandType.TableDirect;

    // This is the name of the base table. 
    cmd.CommandText  = "Orders";

    //Assume: Index contains three columns [int, datetime, money]
    cmd.IndexName    = "SomeIndex"; 

    object[] start = new object[3];
    object[] end   = new object[1];

    start[0] = 1;
    start[1] = new SqlDateTime(1996, 1, 1);
    start[2] = new SqlMoney(10.00);

    end[0]   = 5;

    cmd.SetRange(DbRangeOptions.InclusiveStart |
        DbRangeOptions.InclusiveEnd, start, end); 

    SqlCeDataReader rdr = cmd.ExecuteReader();
    rdr.Seek(DbSeekOptions.AfterEqual, 1, new SqlDateTime(1997, 1,1), 
        new SqlMoney(10.50));
 
    while(rdr.Read()) 
    {
        // Read data in the usual way.    
    }
    rdr.Close();
}

Vea también

Referencia

System.Data.SqlClient

System.Data.SqlServerCe