Procédure : rechercher à l'aide de la classe SqlCeDataReader (par programme)
Cette rubrique explique comment effectuer une recherche à l'aide de l'objet SqlCeDataReader.
Recherche sur un index
La méthode Seek de l'objet SqlCeDataReader vous permet de rechercher rapidement des lignes dans un ensemble de résultats (ou curseur). Lorsque vous effectuez une recherche, vous pouvez spécifier l'étendue de l'index concerné et la façon dont les lignes sont sélectionnées. Dans le cadre d'une recherche, vous devez spécifier la propriété IndexName sur l'objet SqlCeCommand.
Définition de l'étendue de l'index
La méthode SetRange de l'objet SqlCeCommand spécifie l'étendue de l'index sur lequel porte la recherche. Les étendues sont généralement spécifiées à l'aide de valeurs de début et de fin d'index et d'options d'étendue. Celles-ci sont définies par l'énumération DbRangeOptions. Si aucune option d'étendue n'est spécifiée, l'étendue comprend par défaut les valeurs de début et de fin. Si l'option d'étendue DbRangeOptions.Match est définie, l'étendue ne comprend que les lignes dont les valeurs d'index correspondent à la valeur startData. Si l'option d'étendue DbRangeOptions.Prefix est définie, l'étendue comprend toutes les lignes dont les valeurs d'index commencent par la valeur startData. Lorsque vous utilisez Match ou Prefix, vous devez attribuer la valeur NULL à la valeur de fin. Pour plus d'informations, consultez la rubrique « Énumération DbRangeOptions » dans la Bibliothèque de classes .NET Framework.
Options de recherche
Les options de recherche spécifient la façon dont les lignes d'un index doivent être sélectionnées. Les options dont le nom comprend le terme Equal, telles que FirstEqual, LastEqual, BeforeEqual et AfterEqual, sélectionnent les lignes qui correspondent à la valeur de recherche. Si aucune ligne de l'index ne correspond à la valeur de recherche, une ligne avant, dans le cas de FirstEqual et de BeforeEqual, ou après, comme dans le cas de AfterEqual et de LastEqual, est sélectionnée. Pour plus d'informations, consultez la rubrique « Énumération DbSeekOptions » dans la Bibliothèque de classes .NET Framework.
Exemple
L'exemple ci-dessous illustre l'exécution de la méthode Seek sur un index de trois colonnes dont les types de données sont integer, datetime et money. L'index integer s'étend des valeurs 1 à 5, incluses. Les étendues d'index des colonnes datetime et money commencent respectivement à 1/1/1996 et 10,00 $. L'exemple sélectionne une ligne dont les colonnes integer, datetime et money ont respectivement pour valeur 1, 1/1/1997 et 10,50 $. Si aucun index correspondant à ce critère n'existe, la propriété AfterEqual entraîne la sélection de la ligne suivante de l'index.
Notes
Le code ci-dessous utilise le type de commande TableDirect. Lorsque vous utilisez TableDirect avec SQL Server Compact 3.5, vous ne pouvez pas joindre les tables.
// 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();
}