Seek Method

SqlCeDataReader.Seek Method

Places the SqlCeDataReader on the record with indexed values that match the specified parameters.

Namespace: System.Data.SqlServerCe
Assembly: System.Data.SqlServerCe (in

public bool Seek (
	DbSeekOptions dbSeekOptions,
	params Object[] index
public boolean Seek (
	DbSeekOptions dbSeekOptions, 
	Object[] index
public function Seek (
	dbSeekOptions : DbSeekOptions, 
	... index : Object[]
) : boolean



The DbSeekOptions to use.


The index of the record.

Return Value

A Boolean value; true indicates the cursor is positioned on a row.

Exception typeCondition

The value was not found, or another error occurred.

This method is intended to be a faster alternative to a SELECT statement for retrieving a row from a base table. Instead of a WHERE clause in a SELECT statement, Seek can be used to quickly retrieve a row based on its index value. For example, to retrieve an employee with an employee ID of 5, you could execute a SELECT statement, but using Seek with a value of 5 on the employee ID index will greatly improve performance.

Seek can only be used when CommandType is set to TableDirect, CommandText is set to a valid base table name, and IndexName is set to a valid index name on the specified base table.

After using Seek, SqlCeDataReader will return the remaining rows in their index order. When Seek is used on a SqlCeDataReader that has a range specified by SetRange, Seek will only position on rows within the range. For more information, see the "IRowsetIndex::Seek" topic in the OLE DB documentation.

    SqlCeConnection conn = new SqlCeConnection("Data Source = MyDatabase.sdf");

    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)

Any public static (Shared in Microsoft Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Development Platforms

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
Version Information
.NET Framework and NET Compact Framework
Supported in 3.5
.NET Framework
Supported in 3.0
.NET Compact Framework and .Net Framework
Supported in 2.0

© 2016 Microsoft