Vorgehensweise: Suchen mit der SqlCeDataReader-Klasse (programmgesteuert)
In diesem Thema wird beschrieben, wie Sie bei Verwendung von SqlCeDataReader eine Suche ausführen.
Suchen über einen Index
Durch Verwenden der Seek-Methode des SqlCeDataReader-Objekts können Sie Zeilen in einem Resultset (oder Cursor) schnell finden. Für eine Suche können Sie sowohl den Indexbereich angeben, über den gesucht werden soll, als auch die Art und Weise, wie Zeilen ausgewählt werden. Damit gesucht werden kann, muss die IndexName-Eigenschaft für das SqlCeCommand-Objekt angegeben sein.
Festlegen des Indexbereichs
Die SetRange-Methode des SqlCeCommand-Objekts gibt den Indexbereich an, über den gesucht werden soll. Ein Bereich wird üblicherweise mit einem Indexanfangs- und -endwert sowie Bereichsoptionen angegeben. Diese Optionen sind durch die DbRangeOptions-Enumeration definiert. Sind keine Bereichsoptionen angegeben, umfasst der Bereich standardmäßig sowohl den Anfangs- als auch den Endwert. Ist eine Bereichsoption von DbRangeOptions.Match festgelegt, umfasst der Bereich nur Zeilen, in denen die Indexwerte dem startData-Wert entsprechen. Ist eine Bereichsoption von DbRangeOptions.Prefix festgelegt, umfasst der Bereich jede Zeile, in der der Indexwert mit dem startData-Wert startet. Wenn Sie Match oder Prefix verwenden, muss der Endwert auf NULL festgelegt werden. Weitere Informationen finden Sie in der Referenz der .NET Framework-Klassenbibliothek im Thema "DbRangeOptions-Enumeration".
Seek-Optionen
Seek-Optionen geben an, wie Zeilen in einem Index ausgewählt werden sollen. Eine Option, die Equal in ihrem Namen hat (FirstEqual, LastEqual, BeforeEqual und AfterEqual), wählt Zeilen aus, die dem Suchwert entsprechen. Gibt es keine Zeile im Index, die dem Suchwert entspricht, wird die Zeile davor (bei FirstEqual und BeforeEqual) oder die Zeile danach (bei AfterEqual und LastEqual) ausgewählt. Weitere Informationen finden Sie in der Referenz der .NET Framework-Klassenbibliothek im Thema "DbSeekOptions-Enumeration".
Beispiel
Im folgenden Beispiel wird gezeigt, wie die Seek-Methode für einen dreispaltigen Index ausgeführt wird, wobei die Spalten den Datentyp integer, datetime bzw. money aufweisen. Der Indexbereich der integer-Indexspalte erstreckt sich von 1 bis 5 (einschließlich). Der Indexbereich der datetime-Spalte fängt mit dem 1. 1. 1996, und der Indexbereich der money-Spalte fängt mit 10,00 € an. In diesem Beispiel wird eine Zeile ausgewählt, in der die integer-Spalte den Wert 1, die datetime-Spalte den Wert 1. 1. 1997 und die money-Spalte den Wert 10,50 € hat. Wenn keine Indexzeile vorhanden ist, die diesen Kriterien entspricht, wird durch die AfterEqual-Eigenschaft veranlasst, dass die nächste Zeile des Indexes ausgewählt wird.
Hinweis
Im folgenden Code wird der TableDirect-Befehlstyp verwendet. Wenn Sie TableDirect mit SQL Server Compact verwenden, können Sie keine Tabellen verknüpfen.
// 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();
}