Condividi tramite


Procedura: Ricerca tramite la classe SqlCeDataReader (a livello di programmazione)

In questo argomento viene descritto come eseguire la ricerca utilizzando SqlCeDataReader.

Ricerca in un indice

Il metodo Seek dell'oggetto SqlCeDataReader consente di trovare rapidamente righe in un set di risultati o cursore. In occasione della ricerca, è possibile specificare sia l'intervallo dell'indice su cui deve essere eseguita la ricerca che il modo in cui vengono selezionate le righe. Ai fini della ricerca, è necessario specificare la proprietà IndexName per l'oggetto SqlCeCommand.

Impostazione dell'intervallo dell'indice

Il metodo SetRange dell'oggetto SqlCeCommand specifica l'intervallo dell'indice su cui deve essere eseguita la ricerca. Gli intervalli vengono in genere specificati con valori di inizio e di fine dell'indice e opzioni di intervallo, che vengono definite mediante l'enumerazione DbRangeOptions. Se non vengono specificate opzioni di intervallo, per impostazione predefinita l'intervallo include sia il valore di inizio che quello di fine. Se viene impostata l'opzione di intervallo DbRangeOptions.Match, l'intervallo include soltanto le righe in cui i valori di indice corrispondono al valore startData. Se viene impostata l'opzione di intervallo DbRangeOptions.Prefix, l'intervallo include tutte le righe in cui i valori di indice iniziano con il valore startData. Quando si utilizza Match o Prefix, il valore di fine deve essere impostato su Null. Per ulteriori informazioni, vedere "DbRangeOptions Enumeration" nella documentazione di riferimento sulle librerie di classi .NET Framework.

Opzioni di ricerca

Le opzioni di ricerca specificano come devono essere selezionate le righe in un indice. Le opzioni con nomi contenenti Equal, come FirstEqual, LastEqual, BeforeEqual e AfterEqual, consentono di selezionare le righe corrispondenti al valore di ricerca. Se nessuna riga dell'indice corrisponde al valore di ricerca, viene selezionata la riga precedente, nel caso di FirstEqual e BeforeEqual, o successiva, nel caso di AfterEqual e LastEqual. Per ulteriori informazioni, vedere "DbSeekOptions Enumeration" nella documentazione di riferimento sulle librerie di classi .NET Framework.

Esempio

Nell'esempio seguente viene illustrata l'esecuzione del metodo Seek su un indice di tre colonne con tipi di dati integer, datetime e money. L'intervallo di indice per l'indice integer è compreso tra 1 e 5 (inclusi). Gli intervalli di indice per le colonne datetime e money iniziano rispettivamente con 1/1/1996 e $10,00. In questo esempio viene selezionata una riga in cui la colonna integer è 1, la colonna datetime è 1/1/1997 e la colonna money è $10,50. Se non esiste un indice corrispondente ai criteri, la proprietà AfterEqual determina la selezione della riga successiva dell'indice.

Nota

Nel codice seguente viene utilizzato il tipo di comando TableDirect. Quando si utilizza TableDirect con SQL Server Compact, non è possibile unire in join le tabelle.

// 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();
}

Vedere anche

Riferimento

System.Data.SqlClient

System.Data.SqlServerCe