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

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);
        }

Siehe auch

Verweis

SqlCeDataReader Klasse

System.Data.SqlServerCe-Namespace