SqlCeDataReader.Seek-Methode
Platziert die SqlCeDataReader-Klasse im Datensatz mit indizierten Werten, die den angegebenen Parametern entsprechen.
Namespace: System.Data.SqlServerCe
Assembly: System.Data.SqlServerCe (in System.Data.SqlServerCe.dll)
Syntax
'Declaration
<SecurityCriticalAttribute> _
<SecurityTreatAsSafeAttribute> _
<SecurityPermissionAttribute(SecurityAction.Assert, UnmanagedCode := True)> _
Public Function Seek ( _
dbSeekOptions As DbSeekOptions, _
ParamArray index As Object() _
) As Boolean
'Usage
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
Parameter
- dbSeekOptions
Typ: System.Data.SqlServerCe.DbSeekOptions
Die zu verwendende DbSeekOptions-Klasse.
- index
Typ: array<System.Object[]
Der Index des Datensatzes.
Rückgabewert
Typ: System.Boolean
Ein boolescher Wert. "True" zeigt an, dass der Cursor in einer Zeile positioniert wurde.
Ausnahmen
Ausnahme | Bedingung |
---|---|
SqlCeException | Der Wert wurde nicht gefunden, oder ein anderer Fehler ist aufgetreten. |
Hinweise
Diese Methode soll eine schnellere Alternative zu einer SELECT-Anweisung zum Abrufen einer Zeile aus einer Basistabelle darstellen. Anstelle einer WHERE-Klausel in einer SELECT-Anweisung kann Seek dazu verwendet werden, eine Zeile schnell anhand ihres Indexwerts abzurufen. Zum Abrufen des Mitarbeiters mit der Mitarbeiter-ID 5 könnten Sie z. B. eine SELECT-Anweisung ausführen. Die Leistung wird jedoch erheblich gesteigert, wenn Sie Seek mit dem Wert 5 für den Mitarbeiter-ID-Index verwenden.
Seek kann nur verwendet werden, wenn CommandType auf TableDirect, CommandText auf einen gültigen Namen für eine Basistabelle und IndexName auf einen gültigen Indexnamen in der angegebenen Basistabelle festgelegt ist.
Nach der Verwendung von Seek gibt die SqlCeDataReader-Klasse die übrigen Zeilen in ihrer Indexreihenfolge zurück. Wenn Seek bei einer SqlCeDataReader-Klasse verwendet wird, deren Bereich durch SetRange angegeben wird, wird Seek nur in Zeilen innerhalb dieses Bereichs positioniert. Weitere Informationen erhalten Sie unter dem Thema "IRowsetIndex::Seek" in der OLE DB-Dokumentation.
Beispiele
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);
}