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 system.data.sqlserverce.dll)

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)

  • Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see .

Windows CE, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows XP Professional x64 Edition, Windows XP SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Compact Framework

Supported in: 2.0, 1.0

Community Additions