Поделиться через


Как выполнить поиск при помощи класса SqlCeDataReader (программным путем)

В этом разделе приводится описание поиска с помощью SqlCeDataReader.

Поиск в индексе

Метод Seek объекта SqlCeDataReader позволяет быстро находить строки в результирующем наборе (или в курсоре). При выполнении поиска можно задать диапазон индекса для поиска и способ выбора строк. Перед запуском поиска следует задать свойство IndexName в объекте SqlCeCommand.

Настройка диапазона индекса

Метод SetRange объекта SqlCeCommand служит для настройки диапазона индекса, в котором требуется выполнить поиск. Обычно диапазоны задают с помощью значений начала и конца индекса и параметров диапазона. Они определяются перечислением DbRangeOptions. Если параметры диапазона не указаны, то диапазон по умолчанию включает и начальное, и конечное значение. Если задан параметр диапазона DbRangeOptions.Match, то диапазон будет включать только те строки, в которых значения индекса совпадают со значением startData. Если задан параметр диапазона DbRangeOptions.Prefix, то диапазон будет включать все строки, в которых значения индекса начинаются со значения startData. При использовании Match или Prefix конечное значение должно быть NULL. Дополнительные сведения см. в разделе «Перечисление DbRangeOptions» справочной документации по библиотеке классов .NET Framework.

Параметры поиска

Параметры поиска служат для указания способа выбора строк в индексе. Если заданы параметры (например, FirstEqual, LastEqual, BeforeEqual и AfterEqual), в именах которых имеется слово Equal, то выбираются строки, совпадающие с поисковым значением. Если в индексе не найдено строк, совпадающих с поисковым значением, то выбирается строка перед этим значением (если заданы параметры FirstEqual и BeforeEqual) либо после него (если заданы параметры AfterEqual и LastEqual). Дополнительные сведения см. в разделе «Перечисление DbSeekOptions» справочной документации по библиотеке классов .NET Framework.

Пример

В приведенном ниже примере показано применение метода Seek к индексу из трех столбцов, в которых размещены данные типов integer, datetime и money. Диапазон индекса типа integer — от 1 до 5 включительно. Диапазоны индекса для столбцов с данными типов datetime и money начинаются с 01.01.1996 и $10,00 соответственно. В этом образце выбирается строка, в которой значение столбца типа integer — 1, столбца типа datetime — 01.01.1997, а столбца типа money — $10,50. Если соответствующий этим условиям индекс не существует, то — поскольку задано свойство AfterEqual — будет выбрана следующая строка в индексе.

ms173283.note(ru-ru,SQL.100).gifПримечание.
В приведенном коде используются команды типа TableDirect. При использовании команд типа TableDirect в SQL Server Compact 3.5 объединять таблицы нельзя.

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

См. также

Справочник

System.Data.SqlClient

Другие ресурсы

System.Data.SqlServerCe Namespace Overview

Справка и поддержка

Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)