Как выполнить поиск при помощи класса 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 — будет выбрана следующая строка в индексе.
![]() |
---|
В приведенном коде используются команды типа 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.SqlServerCe Namespace Overview
Справка и поддержка
Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)