Como buscar usando a classe SqlCeDataReader (programaticamente)
Este tópico descreve como fazer uma busca ao usar o SqlCeDataReader.
Buscando em um índice
Usando o método Seek do objeto SqlCeDataReader, você pode localizar rapidamente as linhas em um conjunto de resultados (ou cursor). Ao buscar, você pode especificar o intervalo do índice em que será feita a busca e a maneira como as linhas são selecionadas. Para buscar, a propriedade IndexName deve ser especificada no objeto SqlCeCommand.
Configurando o intervalo do índice
O método SetRange do objeto SqlCeCommand especifica o intervalo do índice no qual será feita a busca. Normalmente, os intervalos são especificados com valores de início e final do índice, além de opções do intervalo. Elas são definidas pela enumeração DbRangeOptions. Se não forem especificadas opções de intervalo, por padrão, o intervalo incluirá os valores de início e final. Se uma opção de intervalo de DbRangeOptions.Match for definida, o intervalo incluirá apenas as linhas nas quais os valores do índice correspondem ao valor de startData. Se uma opção de intervalo de DbRangeOptions.Prefix for definida, o intervalo incluirá todas as linhas nas quais os valores de índice iniciam com o valor de startData. Ao usar Match ou Prefix, o valor final deve ser definido como NULL. Para obter mais informações, consulte o tópico "Enumeração DbRangeOptions" na referência da Biblioteca de Classes .NET Framework.
Opções de busca
As opções de busca especificam como selecionar linhas em um índice. As opções, como FirstEqual, LastEqual, BeforeEqual e AfterEqual, que possuem Equal em seus nomes, selecionam linhas que correspondem ao valor da pesquisa. Se nenhuma linha do índice corresponder ao valor da busca, uma linha anterior, no caso de FirstEqual e BeforeEqual, ou posterior, como no caso de AfterEqual e LastEqual, será selecionada. Para obter mais informações, consulte o tópico "Enumeração DbSeekOptions" na referência da Biblioteca de Classes .NET Framework.
Exemplo
O exemplo a seguir mostra o método Seek executado em um índice com três colunas no qual os tipos de dados das colunas são integer, datetime e money. O intervalo do índice integer vai de 1 a 5, inclusive. Os intervalos de índice das colunas datetime e money iniciam em 1/1/1996 e $10.00, respectivamente. Este exemplo seleciona uma linha na qual a coluna integer é 1, a coluna datetime é 1/1/1997 e a coluna money é $10.50. Se não existir um índice que corresponde a esses critérios, a propriedade AfterEqual fará a linha seguinte do índice ser selecionada.
Dica
O código a seguir usa o tipo de comando TableDirect. Ao usar TableDirect com o SQL Server Compact, não é possível unir tabelas.
// 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();
}