SqlCeDataReader でのシーク

このトピックでは、SqlCeDataReader を使ってシークを行う方法について説明します。

インデックスに対するシーク

SqlCeDataReader オブジェクトの Seek メソッドを使用すると、結果セット (またはカーソル) 内の行をすばやく見つけることができます。シーク時には、シーク対象のインデックスの範囲、および行の選択方法を指定できます。シークするには、SqlCeCommand オブジェクトで IndexName プロパティを指定する必要があります。

インデックスの範囲の設定

SqlCeCommand オブジェクトの SetRange メソッドでは、シーク対象のインデックスの範囲を指定します。範囲は、通常、インデックスの開始値と終了値、および範囲オプションで指定します。範囲オプションは、DbRangeOptions 列挙値で定義します。範囲オプションの指定を省略した場合、既定では開始値と終了値の両方を含む範囲が設定されます。範囲オプションに DbRangeOptions.Match を指定すると、インデックスの値が startData の値と一致する行だけが範囲に含まれます。範囲オプションに DbRangeOptions.Prefix を指定すると、インデックスの値が startData の値で始まるすべての行が範囲に含まれます。Match または Prefix を使用する場合は、終了値を NULL に設定する必要があります。詳細については、.NET Framework Class Library で DbRangeOptions のトピックを参照してください。

シークのオプション

シークのオプションでは、インデックスの行の選択方法を指定できます。FirstEqual、LastEqual、BeforeEqual、および AfterEqual など、名前に Equal が含まれるオプションでは、シーク値に一致する行を選択します。シーク値に一致するインデックスの行がない場合、FirstEqual と BeforeEqual では前の行、AfterEqual と LastEqual では後の行が選択されます。詳細については、.NET Framework Class Library で DbSeekOptions のトピックを参照してください。

使用例

次の例では、データ型が integer 型、datetime 型、money 型の 3 つの列で構成されるインデックスに対して Seek メソッドを実行する方法を示しています。integer 型のインデックスのインデックス範囲は、1 ~ 5 です。datetime 型および money 型の列のインデックス範囲の開始値は、それぞれ 1/1/1996、$10.00 です。この例では、integer 型の列が 1、datetime 型の列が 1/1/1997、money 型の列が $10.50 の行を選択します。この条件に一致するインデックスがない場合は、AfterEqual プロパティによってインデックスの次の行が選択されることになります。

メモ :
次のコードでは、TableDirect コマンド タイプを使用しています。SQL Server 2005 Compact Edition で TableDirect を使用する場合、テーブルの結合は使用できません。
// 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.SqlServerCe 名前空間オブジェクト
System.Data.SqlServerCe Namespace (.NET Framework Reference Documentation)

ヘルプおよび情報

SQL Server Compact Edition のサポートについて