Restricts the set of rows that will be read by the SqlCeDataReader.
[Visual Basic] Public Sub SetRange( _ ByVal dbRangeOptions As DbRangeOptions, _ ByVal startData() As Object, _ ByVal endData() As Object _ ) [C#] public void SetRange( DbRangeOptions dbRangeOptions, object[] startData, object[] endData ); [C++] public: void SetRange( DbRangeOptions dbRangeOptions, Object* startData __gc[], Object* endData __gc[] ); [JScript] public function SetRange( dbRangeOptions : DbRangeOptions, startData : Object[], endData : Object[] );
| Exception Type | Condition |
|---|---|
| InvalidOperationException | IndexName property has not been set. |
This method is intended to be a faster alternative to a SELECT statement for retrieving a set of rows from a base table. Instead of a WHERE clause in a SELECT statement, SetRange can be used to quickly retrieve a set of rows based on their index values. For example, to retrieve a set of employees with an employee ID between 1 and 5, you could execute a SELECT statement, but setting a range of 1 to 5 on the employee ID index will greatly improve performance.
This method 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. When SetRange is used, the SqlCeDataReader returned from ExecuteReader will only return rows whose key values in the specified index match the range.
When Seek is used on a SqlCeDataReader that has a range, Seek will only position on rows in the specified range. For detailed information on SetRange, see the "IRowsetIndex::SetRange" topic in the OLE DB documentation.
[Visual Basic, C#] This example retrieves data from the Orders table using an index into a SqlCeDataReader. The range on the index on which to Seek is specified by the SetRange method.
[Visual Basic] Public Sub CreateMySqlCeCommand(conn As SqlCeConnection) Dim cmd As SqlCeCommand = conn.CreateCommand() cmd.CommandType = CommandType.TableDirect 'This is the name of the base table cmd.CommandText = "Orders" 'Assume: Index contains three columns [int, datetime, money] cmd.IndexName = "SomeIndex" Dim start(3) As Object Dim [end](1) As Object start(0) = 1 start(1) = New SqlDateTime(1996, 1, 1) start(2) = New SqlMoney(10.0) [end](0) = 5 cmd.SetRange(DbRangeOptions.InclusiveStart Or DbRangeOptions.InclusiveEnd, start, [end]) Dim rdr As SqlCeDataReader = cmd.ExecuteReader() rdr.Seek(DbSeekOptions.AfterEqual, 1, New SqlDateTime(1997, 1, 1), New SqlMoney(10.5)) While rdr.Read() End While ' Read data in the usual way rdr.Close() End Sub [C#] public void CreateMySqlCeCommand(SqlCeConnection conn) { SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.TableDirect; // This is the name of the base table cmd.CommandText = "Orders"; //Assume: Index contains three columns [int, datetime, money] cmd.IndexName = "SomeIndex"; object[] start = new object[3]; object[] end = new object[1]; start[0] = 1; start[1] = new SqlDateTime(1996, 1, 1); start[2] = new SqlMoney(10.00); end[0] = 5; cmd.SetRange(DbRangeOptions.InclusiveStart | DbRangeOptions.InclusiveEnd, start, end); SqlCeDataReader rdr = cmd.ExecuteReader(); rdr.Seek(DbSeekOptions.AfterEqual, 1, new SqlDateTime(1997, 1,1), new SqlMoney(10.50)); while(rdr.Read()) { // Read data in the usual way } rdr.Close(); }
[C++, JScript] No example is available for C++ or JScript. To view a Visual Basic or C# example, click the Language Filter button
in the upper-left corner of the page.
Platforms: .NET Compact Framework - Windows CE .NET
.NET Framework Security:
SqlCeCommand Class | SqlCeCommand Members | System.Data.SqlServerCe Namespace