如何使用 SqlCeDataReader 类进行查找(以编程方式)

本主题描述如何使用 SqlCeDataReader 进行查找。

在索引上查找

通过使用 SqlCeDataReader 对象的 Seek 方法,可以在结果集(或游标)中快速发现行。在进行查找时,您可以同时指定要进行查找的索引的范围和选择行的方式。若要进行查找,必须在 SqlCeCommand 对象上指定 IndexName 属性。

设置索引范围

SqlCeCommand 对象的 SetRange 方法指定要进行查找的索引范围。通常使用索引开始和结束值以及范围选项来指定范围。这些是由 DbRangeOptions 枚举指定的。如果没有指定任何范围选项,默认情况下,范围会包括开始和结束值。如果设置了 DbRangeOptions.Match 的范围选项,该范围将只包括其索引值匹配 startData 值的所有行。如果设置了 DbRangeOptions.Prefix 的范围选项,该范围将包括其索引值以 startData 值开始的所有行。当使用 Match 或 Prefix 时,结束值必须设置为 NULL。有关详细信息,请参阅 .NET Framework 类库参考中的“DbRangeOptions Enumeration”主题。

查找选项

查找选项指定如何选择索引上的行。诸如 FirstEqual、LastEqual、BeforeEqual 和 AfterEqual 的选项,其名称中都包含 Equal,这些选项选择匹配查找值的行。如果没有与查找值匹配的索引行,则会选择之前(如果 FirstEqual 和 BeforeEqual)或之后(如果 AfterEqual 和 LastEqual)的行。有关详细信息,请参阅 .NET Framework 类库参考中的“DbSeekOptions Enumeration”主题。

示例

下面的示例说明在三列索引上执行的 Seek 方法,列上的数据类型是 integer、datetime 和 money。integer 索引的索引范围从 1 到 5(含)。datetime 和 money 列的索引范围分别开始于 1/1/1996 和 $10.00。该示例选择 integer 列为 1、datetime 列为 1/1/1997 以及 money 列为 $10.50 的行。如果不存在匹配该条件的索引,AfterEqual 属性将会选择该索引的下一行。

备注

下面的代码使用 TableDirect 命令类型。在将 TableDirect 用于 SQL Server Compact 3.5 时,无法联接表。

// Example that seeks on a three-column index
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();
}

请参阅

参考

System.Data.SqlClient

System.Data.SqlServerCe