Método SqlCeDataReader.Seek
Coloca o SqlCeDataReader no registro com valores indexados que correspondem aos parâmetros especificados.
Namespace: System.Data.SqlServerCe
Assembly: System.Data.SqlServerCe (em System.Data.SqlServerCe.dll)
Sintaxe
'Declaração
<SecurityCriticalAttribute> _
<SecurityTreatAsSafeAttribute> _
<SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode := True)> _
Public Function Seek ( _
dbSeekOptions As DbSeekOptions, _
ParamArray index As Object() _
) As Boolean
'Uso
Dim instance As SqlCeDataReader
Dim dbSeekOptions As DbSeekOptions
Dim index As Object()
Dim returnValue As Boolean
returnValue = instance.Seek(dbSeekOptions, _
index)
[SecurityCriticalAttribute]
[SecurityTreatAsSafeAttribute]
[SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode = true)]
public bool Seek(
DbSeekOptions dbSeekOptions,
params Object[] index
)
[SecurityCriticalAttribute]
[SecurityTreatAsSafeAttribute]
[SecurityPermissionAttribute(SecurityAction::Assert, UnmanagedCode = true)]
public:
bool Seek(
DbSeekOptions dbSeekOptions,
... array<Object^>^ index
)
[<SecurityCriticalAttribute>]
[<SecurityTreatAsSafeAttribute>]
[<SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode = true)>]
member Seek :
dbSeekOptions:DbSeekOptions *
index:Object[] -> bool
public function Seek(
dbSeekOptions : DbSeekOptions,
... index : Object[]
) : boolean
Parâmetros
- dbSeekOptions
Tipo: System.Data.SqlServerCe.DbSeekOptions
As DbSeekOptions a serem usadas.
- index
Tipo: array<System.Object[]
O índice do registro.
Valor de retorno
Tipo: System.Boolean
Um valor booliano; true indica que o cursor está posicionado em uma linha.
Exceções
Exceção | Condição |
---|---|
SqlCeException | O valor não foi encontrado ou ocorreu um outro erro. |
Comentários
Pretende-se que este método seja uma alternativa mais rápida a uma instrução SELECT para recuperar uma linha de uma tabela base. Em vez de uma cláusula WHERE em uma instrução SELECT, Seek pode ser usado para recuperar rapidamente uma linha com base em seu valor de índice. Por exemplo, para recuperar um funcionário com a identificação 5, você poderia executar uma instrução SELECT, mas o uso de Seek com um valor de 5 no índice das identificações de funcionários melhorará bastante o desempenho.
Seek pode ser usado somente quando CommandType estiver definido como TableDirect, CommandText estiver definido com um nome de tabela base válido e IndexName estiver definido com um nome de índice válido na tabela base especificada.
Depois de usar Seek, SqlCeDataReader retornará as linhas restantes na ordem do índice. Quando Seek for usado em um SqlCeDataReader que possui um intervalo especificado por SetRange, Seek se posicionará apenas nas linhas do intervalo. Para obter mais informações, consulte o tópico "IRowsetIndex::Seek" na documentação do OLE DB.
Exemplos
Try
Dim conn As New SqlCeConnection("Data Source = MyDatabase.sdf")
conn.Open()
Dim cmd As SqlCeCommand = conn.CreateCommand()
cmd.CommandType = CommandType.TableDirect
cmd.IndexName = "Orders_PK"
cmd.CommandText = "Orders"
' We are interested in orders that match Order ID = 10020
'
cmd.SetRange(DbRangeOptions.Match, New Object() {10020}, Nothing)
Dim reader As SqlCeDataReader = cmd.ExecuteReader(CommandBehavior.Default)
While reader.Read()
MessageBox.Show(String.Format("{0} ; {1}", reader("Order ID"), reader("Order Date")))
End While
' Now we are interested in orders with Order ID between (10020, 10050)
'
cmd.SetRange(DbRangeOptions.InclusiveStart Or DbRangeOptions.InclusiveEnd, New Object() {10020}, New Object() {10050})
reader = cmd.ExecuteReader(CommandBehavior.Default)
' Now seek to Order ID = 10045
'
Dim onRow As Boolean = reader.Seek(DbSeekOptions.FirstEqual, New Object() {10045})
' Now ,the reader will return rows with Order ID >= 10045 <= 10050
' because the range was set to (10020, 10050)
'
If onRow Then
While reader.Read()
MessageBox.Show(String.Format("{0} ; {1}", reader("Order ID"), reader("Order Date")))
End While
End If
Catch e As Exception
MessageBox.Show(e.Message)
End Try
try
{
SqlCeConnection conn = new SqlCeConnection("Data Source = MyDatabase.sdf");
conn.Open();
SqlCeCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.TableDirect;
cmd.IndexName = "Orders_PK";
cmd.CommandText = "Orders";
// We are interested in orders that match Order ID = 10020
//
cmd.SetRange(DbRangeOptions.Match, new object[] { 10020 }, null);
SqlCeDataReader reader = cmd.ExecuteReader(CommandBehavior.Default);
for (int i = 1; reader.Read(); i++)
{
MessageBox.Show(String.Format("{0} ; {1}", reader["Order ID"], reader["Order Date"]));
}
// Now we are interested in orders with Order ID between (10020, 10050)
//
cmd.SetRange(DbRangeOptions.InclusiveStart | DbRangeOptions.InclusiveEnd,
new object[] { 10020 }, new object[] { 10050 });
reader = cmd.ExecuteReader(CommandBehavior.Default);
// Now seek to Order ID = 10045
//
bool onRow = reader.Seek(DbSeekOptions.FirstEqual, new object[] { 10045 });
// Now ,the reader will return rows with Order ID >= 10045 <= 10050
// because the range was set to (10020, 10050)
//
if (onRow)
{
for (int i = 1; reader.Read(); i++)
{
MessageBox.Show(String.Format("{0} ; {1}", reader["Order ID"], reader["Order Date"]));
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}