SqlCeCommand.SetRange Method

Limita il gruppo di righe che verrà letto da SqlCeDataReader.

Spazio dei nomi: System.Data.SqlServerCe
Assembly: System.Data.SqlServerCe (in system.data.sqlserverce.dll)

Sintassi

'Dichiarazione
Public Sub SetRange ( _
    dbRangeOptions As DbRangeOptions, _
    startData As Object(), _
    endData As Object() _
)
public void SetRange (
    DbRangeOptions dbRangeOptions,
    Object[] startData,
    Object[] endData
)
public:
void SetRange (
    DbRangeOptions dbRangeOptions, 
    array<Object^>^ startData, 
    array<Object^>^ endData
)
public void SetRange (
    DbRangeOptions dbRangeOptions, 
    Object[] startData, 
    Object[] endData
)
public function SetRange (
    dbRangeOptions : DbRangeOptions, 
    startData : Object[], 
    endData : Object[]
)

Parametri

  • dbRangeOptions
    Opzioni utilizzate per specificare l'intervallo.
  • startData
    Valori chiave iniziali per l'intervallo.
  • endData
    Valori chiave finali per l'intervallo.

Eccezioni

Tipo di eccezione Condizione
InvalidOperationException

La proprietà IndexName non è stata impostata.

Osservazioni

Questo metodo è destinato a essere un'alternativa più rapida rispetto all'istruzione SELECT per il recupero di un gruppo di righe da una tabella di base. Invece della clausola WHERE in un'istruzione SELECT, è possibile utilizzare SetRange per recuperare più rapidamente un gruppo di righe in base ai relativi valori di indice. Ad esempio, per recuperare un gruppo di impiegati con un identificatore compreso tra 1 e 5, è possibile eseguire un'istruzione SELECT, tuttavia l'impostazione di un intervallo da 1 a 5 sull'indice dell'identificatore impiegato aumenterà notevolmente le prestazioni.

Questo metodo può essere utilizzato solo quando la proprietà CommandType è impostata su TableDirect, la proprietà CommandText è impostata su un nome di tabella di base valido e la proprietà IndexName è impostata su un nome di indice valido della tabella di base specificata. Se si utilizza SetRange, l'oggetto SqlCeDataReader restituito dal metodo ExecuteReader restituirà solo le righe i cui valori di chiave nell'indice specificato sono compresi nell'intervallo.

Quando il metodo Seek viene utilizzato su un oggetto SqlCeDataReader che presenta un intervallo, Seek verrà posizionato solo sulle righe nell'intervallo specificato. Per informazioni dettagliate sul metodo SetRange, consultare l'argomento "IRowsetIndex::SetRange" nella documentazione di OLE DB.

Esempio

In questo esempio vengono recuperati i dati dalla tabella degli ordini mediante l'uso di un indice in un oggetto SqlCeDataReader. L'intervallo di indice in cui eseguire Seek è specificato dal metodo SetRange.

Try
    Dim conn As New SqlCeConnection("Data Source = MyDatabase.sdf")
    conn.Open()

    Dim cmd As SqlCeCommand = conn.CreateCommand()
    cmd.CommandType = CommandType.TableDirect
    cmd.IndexName = "Orders_PK"
    cmd.CommandText = "Orders"

    ' We are interested in orders that match Order ID = 10020
    '
    cmd.SetRange(DbRangeOptions.Match, New Object() {10020}, Nothing)

    Dim reader As SqlCeDataReader = cmd.ExecuteReader(CommandBehavior.Default)

    While reader.Read()
        MessageBox.Show(String.Format("{0} ; {1}", reader("Order ID"), reader("Order Date")))
    End While

    ' Now we are interested in orders with Order ID between (10020, 10050)
    '
    cmd.SetRange(DbRangeOptions.InclusiveStart Or DbRangeOptions.InclusiveEnd, New Object() {10020}, New Object() {10050})

    reader = cmd.ExecuteReader(CommandBehavior.Default)

    ' Now seek to Order ID = 10045
    '
    Dim onRow As Boolean =  reader.Seek(DbSeekOptions.FirstEqual, New Object() {10045})

    ' Now ,the reader will return rows with Order ID >= 10045 <= 10050
    ' because the range was set to (10020, 10050)
    '
    If onRow Then
        While reader.Read()
            MessageBox.Show(String.Format("{0} ; {1}", reader("Order ID"), reader("Order Date")))
        End While
    End If
Catch e As Exception
    MessageBox.Show(e.Message)
End Try
try
{
    SqlCeConnection conn = new SqlCeConnection("Data Source = MyDatabase.sdf");
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandType = CommandType.TableDirect;
    cmd.IndexName = "Orders_PK";
    cmd.CommandText = "Orders";

    // We are interested in orders that match Order ID = 10020
    //
    cmd.SetRange(DbRangeOptions.Match, new object[] { 10020 }, null);

    SqlCeDataReader reader = cmd.ExecuteReader(CommandBehavior.Default);

    for (int i = 1; reader.Read(); i++)
    {
        MessageBox.Show(String.Format("{0} ; {1}", reader["Order ID"], reader["Order Date"]));
    }

    // Now we are interested in orders with Order ID between (10020, 10050)
    //
    cmd.SetRange(DbRangeOptions.InclusiveStart | DbRangeOptions.InclusiveEnd,
        new object[] { 10020 }, new object[] { 10050 });

    reader = cmd.ExecuteReader(CommandBehavior.Default);

    // Now seek to Order ID = 10045
    //
    bool onRow = reader.Seek(DbSeekOptions.FirstEqual, new object[] { 10045 });

    // Now ,the reader will return rows with Order ID >= 10045 <= 10050
    // because the range was set to (10020, 10050)
    //
    if (onRow)
    {
        for (int i = 1; reader.Read(); i++)
        {
            MessageBox.Show(String.Format("{0} ; {1}", reader["Order ID"], reader["Order Date"]));
        }
    }
}
catch (Exception e)
{
    MessageBox.Show(e.Message);
}

Affidabilità

Tutti i membri statici pubblici (Shared in Microsoft Visual Basic) di questo tipo sono affidabili. Non è invece garantita l'affidabilità dei membri dell'istanza.

Piattaforme

Piattaforme di sviluppo

Windows Vista, Windows Mobile 5.0, Windows XP Professional with Service Pack 2 (SP2), Windows Server 2003, Windows Mobile 2003 for Pocket PC, Windows CE 5.0
Informazioni sulla versione
.NET Framework e .NET Compact Framework
Supportato in 3.5
.NET Framework
Supportato in 3.0
.NET Compact Framework e .NET Framework
Supportato in 2.0

Vedere anche

Riferimento

SqlCeCommand Class
SqlCeCommand Members
System.Data.SqlServerCe Namespace