Перечисление DbRangeOptions
Задает параметры, которые будут использоваться методом SetRange при указании диапазона индекса, по которому будет производиться поиск.
Это перечисление имеет атрибут FlagsAttribute, допускающий побитовое сочетание значений его элементов.
Пространство имен: System.Data.SqlServerCe
Сборка: System.Data.SqlServerCe (в System.Data.SqlServerCe.dll)
Синтаксис
'Декларация
<FlagsAttribute> _
Public Enumeration DbRangeOptions
'Применение
Dim instance As DbRangeOptions
[FlagsAttribute]
public enum DbRangeOptions
[FlagsAttribute]
public enum class DbRangeOptions
[<FlagsAttribute>]
type DbRangeOptions
public enum DbRangeOptions
Элементы
Имя элемента | Описание | |
---|---|---|
InclusiveStart | Включает в диапазон значение startData. | |
InclusiveEnd | Включает в диапазон значение endData. | |
ExclusiveStart | Исключает из диапазона значение startData. | |
ExclusiveEnd | Исключает из диапазона значение endData. | |
ExcludeNulls | Исключает из диапазона значения nullпустая ссылка (Nothing в Visual Basic). | |
Prefix | Задает диапазон, в котором значения индекса начинаются со значения параметра startData. При использовании параметра Prefix параметр endData должен иметь значение nullпустая ссылка (Nothing в Visual Basic). | |
Match | Задает диапазон, в котором значения индекса совпадают со значением параметра startData. При использовании параметра Match параметр endData должен иметь значение nullпустая ссылка (Nothing в Visual Basic). | |
Default | То же самое, что одновременная установка флагов InclusiveStart и InclusiveEnd. |
Замечания
Если задан параметр Match или Prefix, то свойство endData должно быть установлено в значение nullпустая ссылка (Nothing в Visual Basic).
Параметры Match и ExcludeNulls совмещать нельзя.
Примеры
В следующем примере для операции Seek над индексом при вызове метода SetRange указываются параметры диапазона InclusiveStart и InclusiveEnd.
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);
}