방법: SqlCeDataReader 클래스를 사용하여 찾기(프로그래밍 방식)

이 항목에서는 SqlCeDataReader를 사용하여 찾는 방법을 설명합니다.

SqlCeDataReader 개체의 Seek 메서드를 사용하면 결과 집합에서 행 또는 커서를 빨리 찾을 수 있습니다. 찾는 경우 찾을 인덱스의 범위 및 행의 선택 방법을 모두 지정할 수 있습니다. 찾으려면 IndexName 속성을 SqlCeCommand 개체에 지정해야 합니다.

인덱스 범위 설정

SqlCeCommand 개체의 SetRange 메서드는 찾으려는 인덱스의 범위를 지정합니다. 범위는 일반적으로 인덱스 시작/끝 값 및 범위 옵션으로 지정합니다. 이러한 범위는 DbRangeOptions 열거형에서 정의합니다. 범위 옵션을 모두 지정하지 않은 경우 기본적으로 시작과 끝 값이 모두 범위에 포함됩니다. DbRangeOptions.Match 범위 옵션을 설정하면 인덱스 값이 startData 값과 일치하는 행만 범위에 포함됩니다. DbRangeOptions.Prefix 범위 옵션을 설정하면 인덱스 값이 startData 값으로 시작하는 행이 모두 범위에 포함됩니다. Match 또는 Prefix를 사용할 경우 끝 값을 NULL로 설정해야 합니다. 자세한 내용은 .NET Framework Class Library 참조에서 "DbRangeOptions 열거형" 항목을 참조하십시오.

찾기 옵션

찾기 옵션은 인덱스에서 행을 선택하는 방법을 지정합니다. 이름에 Equal이 있는 FirstEqual, LastEqual, BeforeEqualAfterEqual같은 옵션은 찾기 값과 일치하는 행을 선택합니다. 찾기 값과 일치하는 인덱스 행이 없으면 AfterEqualLastEqual의 경우처럼 앞에 있거나 FirstEqualBeforeEqual의 경우처럼 뒤에 있는 행 하나를 선택합니다. 자세한 내용은 .NET Framework Class Library 참조에서 "DbSeekOptions 열거형" 항목을 참조하십시오.

다음 예에서는 integer, datetimemoney 열 데이터 형식의 3개로 된 열 인덱스에서 실행되는 Seek 메서드를 보여 줍니다. integer 인덱스의 인덱스 범위는 1에서 5까지입니다. datetimemoney 열의 인덱스 범위는 각각 1/1/1996 및 10.00달러에서 시작합니다. 이 예의 경우 integer 열이 1이고, datetime 열이 1/1/1997이며, money 열이 10.50달러인 행을 선택합니다. 이 기준과 일치하는 인덱스가 없으면 AfterEqual 속성이 해당 인덱스에 있는 다음 행을 선택하도록 합니다.

참고 참고

다음은 TableDirect 명령 유형을 사용하는 코드입니다. SQL Server Compact에서 TableDirect를 사용하면 테이블을 조인할 수 없습니다.

// 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();
}
표시: