SqlCeCommand.SetRange 方法

限制 SqlCeDataReader 读取的行集。

**命名空间:**System.Data.SqlServerCe
**程序集:**System.Data.SqlServerCe(在 system.data.sqlserverce.dll 中)

语法

声明
Public Sub SetRange ( _
    dbRangeOptions As DbRangeOptions, _
    startData As Object(), _
    endData As Object() _
)
用法
Dim instance As SqlCeCommand
Dim dbRangeOptions As DbRangeOptions
Dim startData As Object()
Dim endData As Object()

instance.SetRange(dbRangeOptions, startData, endData)
public void SetRange (
    DbRangeOptions dbRangeOptions,
    Object[] startData,
    Object[] endData
)
public:
void SetRange (
    DbRangeOptions dbRangeOptions, 
    array<Object^>^ startData, 
    array<Object^>^ endData
)
public void SetRange (
    DbRangeOptions dbRangeOptions, 
    Object[] startData, 
    Object[] endData
)
public function SetRange (
    dbRangeOptions : DbRangeOptions, 
    startData : Object[], 
    endData : Object[]
)

参数

  • dbRangeOptions
    指定范围时使用的选项。
  • startData
    范围的起始键值。
  • endData
    范围的结束键值。

异常

异常类型 条件

InvalidOperationException

没有设置 IndexName 属性。

备注

此方法可用于代替 SELECT 语句,以更快的速度从基表中检索行集。可以不在 SELECT 语句中使用 WHERE 子句,而使用 SetRange 来基于行的索引值迅速检索行集。例如,要检索雇员 ID 在 1 到 5 之间的一组雇员,可以执行 SELECT 语句,但如果将雇员 ID 索引范围设置为 1 至 5,则将大大提高性能。

只有将 CommandType 设置为 TableDirect,将 CommandText 设置为有效基表名称,并将 IndexName 设置为指定基表的有效索引名称,才可以使用此方法。在使用 SetRange 时,ExecuteReader 返回的 SqlCeDataReader 将只返回那些在指定索引中的键值与该范围相匹配的行。

在指定了范围的 SqlCeDataReader 上使用 Seek 时,Seek 将只搜索指定范围内的行。有关 SetRange 的详细信息,请参见 OLE DB 文档中的“IRowsetIndex::SetRange”主题。

示例

下面的示例使用 SqlCeDataReader 的索引从顺序表检索数据。在其上执行 Seek 操作的索引范围是由 SetRange 方法指定的。

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

.NET Framework 安全性

  • 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见。

平台

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

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

SqlCeCommand 类
SqlCeCommand 成员
System.Data.SqlServerCe 命名空间