Share via


SqlCeDataReader.Seek Method

지정된 매개 변수와 일치하는 인덱싱된 값을 가진 레코드에 SqlCeDataReader를 적용합니다.

네임스페이스: System.Data.SqlServerCe
어셈블리: System.Data.SqlServerCe(system.data.sqlserverce.dll에 있음)

구문

‘선언
Public Function Seek ( _
    dbSeekOptions As DbSeekOptions, _
    ParamArray index As Object() _
) As Boolean
public bool Seek (
    DbSeekOptions dbSeekOptions,
    params Object[] index
)
public:
bool Seek (
    DbSeekOptions dbSeekOptions, 
    ... array<Object^>^ index
)
public boolean Seek (
    DbSeekOptions dbSeekOptions, 
    Object[] index
)
public function Seek (
    dbSeekOptions : DbSeekOptions, 
    ... index : Object[]
) : boolean

매개 변수

  • index

반환 값

부울 값. true는 커서가 행에 있음을 나타냅니다.

예외

예외 유형 조건
SqlCeException

값을 찾을 수 없거나 다른 오류가 발생한 경우

주의

이 메서드를 사용하면 SELECT 문을 사용하는 경우보다 빠르게 기본 테이블의 행을 검색할 수 있습니다. Seek를 사용하면 SELECT 문에서 WHERE 절을 사용하는 경우보다 인덱스 값을 기반으로 행을 보다 빠르게 검색할 수 있습니다. 예를 들어, 직원 ID가 5인 직원을 검색하려면 SELECT 문을 실행할 수도 있지만 직원 ID 인덱스 값 5와 함께 Seek를 사용하면 매우 효과적입니다.

SeekCommandTypeTableDirect로 설정되고, CommandText가 유효한 기본 테이블 이름으로 설정되며, IndexName이 지정된 기본 테이블의 유효한 인덱스 이름으로 설정된 경우에만 사용할 수 있습니다.

Seek를 사용한 다음에는 SqlCeDataReader가 인덱스 순서에 따라 나머지 행을 반환합니다. SetRange로 지정된 범위를 가진 SqlCeDataReader에서 Seek를 사용하면 Seek는 해당 범위 안에 있는 행만 찾습니다. 자세한 내용은 OLE DB 설명서의 "IRowsetIndex::Seek" 항목을 참조하십시오.

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

스레드 보안

이 유형의 모든 public static(Microsoft Visual Basic의 경우 공유) 멤버는 스레드로부터 안전합니다. 인스턴스 멤버는 스레드로부터의 안전성이 보장되지 않습니다.

플랫폼

개발 플랫폼

Windows Vista, Windows Mobile 5.0, Windows XP Professional with Service Pack 2 (SP2), Windows Server 2003, Windows Mobile 2003 for Pocket PC, Windows CE 5.0
버전 정보
.NET Framework 및 NET Compact Framework
3.5에서 지원됨
.NET Framework
3.0에서 지원됨
.NET Compact Framework 및 .Net Framework
2.0에서 지원됨

참고 항목

참조

SqlCeDataReader Class
SqlCeDataReader Members
System.Data.SqlServerCe Namespace