Export (0) Print
Expand All

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)

[SecurityCriticalAttribute]
[SecurityTreatAsSafeAttribute]
[SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode = true)]
public bool Seek(
	DbSeekOptions dbSeekOptions,
	params Object[] index
)

Parameters

dbSeekOptions
Type: System.Data.SqlServerCe.DbSeekOptions
The DbSeekOptions to use.
index
Type: System.Object[]
The index of the record.

Return Value

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

ExceptionCondition
SqlCeException

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.

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


Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft