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
Параметры
- dbSeekOptions
DbSeekOptions для использования.
- 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