如何:使用 SqlCeDataReader 類別進行搜尋 (以程式設計方式)
此主題說明如何使用 SqlCeDataReader 搜尋。
搜尋索引
使用 SqlCeDataReader 物件的 Seek 方法,您可以迅速找到結果集 (或資料指標) 中的資料列。在搜尋時,您可以指定要搜尋的索引範圍,以及選取資料列的方式。若要搜尋,必須在 SqlCeCommand 物件上指定 IndexName 屬性。
設定索引範圍
SqlCeCommand 物件的 SetRange 方法會指定要搜尋的索引範圍。通常會利用索引的起始值與結束值以及範圍選項來指定範圍。這些會由 DbRangeOptions 列舉加以定義。若未指定任何範圍選項,依預設值,其範圍會包含起始值與結束值。若有設定 DbRangeOptions.Match 的範圍選項,其範圍只會包含索引值符合 startData 值的資料列。若有設定 DbRangeOptions.Prefix 的範圍選項,其範圍會包含索引值以 startData 值開始的所有資料列。在使用 Match 或 Prefix 時,結束值必須設為 NULL。如需詳細資訊,請參閱 .NET Framework 類別庫參考中的「DbRangeOptions 列舉」主題。
搜尋選項
搜尋選項會指定如何選取索引上的資料列。例如 FirstEqual、LastEqual、BeforeEqual 及 AfterEqual 等名稱中含有 Equal 的選項會選取符合搜尋值的資料列。如果索引沒有任何資料列符合搜尋值,則在 FirstEqual 與 BeforeEqual 的情況下就會選取前一個資料列,而在 AfterEqual 與 LastEqual 的情況下就會選取後一個資料列。如需詳細資訊,請參閱 .NET Framework 類別庫參考中的「DbSeekOptions 列舉」主題。
範例
以下範例說明在三個資料行的索引上執行 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 命令類型。以 SQL Server Compact 使用 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();
}