SqlCeDataReader.Seek Method

Позиционирует модуль чтения данных SqlCeDataReader на запись со значениями индекса, совпадающими с заданными параметрами.

Пространство имен: System.Data.SqlServerCe
Сборка: System.Data.SqlServerCe (в system.data.sqlserverce.dll)

Синтаксис

'Декларация
Public Function Seek ( _
    dbSeekOptions As DbSeekOptions, _
    ParamArray index As Object() _
) As Boolean
public bool Seek (
    DbSeekOptions dbSeekOptions,
    params Object[] index
)
public:
bool Seek (
    DbSeekOptions dbSeekOptions, 
    ... array<Object^>^ index
)
public boolean Seek (
    DbSeekOptions dbSeekOptions, 
    Object[] index
)
public function Seek (
    dbSeekOptions : DbSeekOptions, 
    ... index : Object[]
) : boolean

Параметры

  • index
    Индекс записи.

Возвращаемое значение

Логическое значение. Значение true указывает, что произведено позиционирование курсора на строке.

Исключения

Тип исключения Условие
SqlCeException

Значение не найдено, или произошла другая ошибка.

Замечания

Этот метод представляет собой более быструю альтернативу инструкции SELECT для выбора строки из базовой таблицы. Метод Seek позволяет вместо указания WHERE в инструкции SELECT быстро получить строку на основе значения ее индекса. Например, если необходимо найти сотрудника с идентификатором 5, то это можно сделать с помощью инструкции SELECT. Однако вызов метода Seek со значением 5 в качестве значения индекса позволяет значительно повысить производительность.

Метод Seek может применяться, только если свойство CommandType имеет значение TableDirect, свойство CommandText содержит допустимое имя базовой таблицы, а свойство IndexName содержит допустимое имя индекса для заданной базовой таблицы.

После вызова метода Seek модуль чтения данных SqlCeDataReader возвращает оставшиеся строки в порядке, который определен индексом. Если метод Seek вызывается для модуля чтения данных SqlCeDataReader, для которого был задан диапазон методом SetRange, то метод Seek работает только со строками, находящимися в пределах этого диапазона. Дополнительные сведения см. в разделе «IRowsetIndex::Seek» документации по OLE DB.

Пример

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

Многопоточное использование

Все общие статические члены (Shared в Microsoft Visual Basic) этого типа можно использовать в многопоточных операциях. Безопасная многопоточная работа с членами экземпляров типа не гарантируется.

Платформы

Платформы разработки

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
Сведения о версии
.NET Framework и NET Compact Framework
Поддерживается в версии 3.5
.NET Framework
Поддерживается в версии 3.0
.NET Compact Framework и .Net Framework
Поддерживается в версии 2.0

См. также

Справочник

SqlCeDataReader Class
SqlCeDataReader Members
System.Data.SqlServerCe Namespace