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


Метод SqlCeDataReader.Seek

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

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

Синтаксис

'Декларация
<SecurityCriticalAttribute> _
<SecurityTreatAsSafeAttribute> _
<SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode := True)> _
Public Function Seek ( _
    dbSeekOptions As DbSeekOptions, _
    ParamArray index As Object() _
) As Boolean
'Применение
Dim instance As SqlCeDataReader
Dim dbSeekOptions As DbSeekOptions
Dim index As Object()
Dim returnValue As Boolean

returnValue = instance.Seek(dbSeekOptions, _
    index)
[SecurityCriticalAttribute]
[SecurityTreatAsSafeAttribute]
[SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode = true)]
public bool Seek(
    DbSeekOptions dbSeekOptions,
    params Object[] index
)
[SecurityCriticalAttribute]
[SecurityTreatAsSafeAttribute]
[SecurityPermissionAttribute(SecurityAction::Assert, UnmanagedCode = true)]
public:
bool Seek(
    DbSeekOptions dbSeekOptions, 
    ... array<Object^>^ index
)
[<SecurityCriticalAttribute>]
[<SecurityTreatAsSafeAttribute>]
[<SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode = true)>]
member Seek : 
        dbSeekOptions:DbSeekOptions * 
        index:Object[] -> bool 
public function Seek(
    dbSeekOptions : DbSeekOptions, 
    ... index : Object[]
) : boolean

Параметры

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

Тип: System.Boolean
Логическое значение. Значение 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);
        }

См. также

Справочник

SqlCeDataReader Класс

Пространство имен System.Data.SqlServerCe