SqlCeCommand.SetRange 메서드

SqlCeDataReader가 읽을 행의 집합을 제한합니다.

네임스페이스:  System.Data.SqlServerCe
어셈블리:  System.Data.SqlServerCe(System.Data.SqlServerCe.dll)

구문

‘선언
Public Sub SetRange ( _
    dbRangeOptions As DbRangeOptions, _
    startData As Object(), _
    endData As Object() _
)
‘사용 방법
Dim instance As SqlCeCommand
Dim dbRangeOptions As DbRangeOptions
Dim startData As Object()
Dim endData As Object()

instance.SetRange(dbRangeOptions, startData, _
    endData)
public void SetRange(
    DbRangeOptions dbRangeOptions,
    Object[] startData,
    Object[] endData
)
public:
void SetRange(
    DbRangeOptions dbRangeOptions, 
    array<Object^>^ startData, 
    array<Object^>^ endData
)
member SetRange : 
        dbRangeOptions:DbRangeOptions * 
        startData:Object[] * 
        endData:Object[] -> unit 
public function SetRange(
    dbRangeOptions : DbRangeOptions, 
    startData : Object[], 
    endData : Object[]
)

매개 변수

  • startData
    유형: array<System.Object[]
    범위의 시작 키 값입니다.
  • endData
    유형: array<System.Object[]
    범위의 종료 키 값입니다.

예외

예외 조건
InvalidOperationException

IndexName 속성이 설정되어 있지 않은 경우

주의

이 메서드는 SELECT 문보다 빠르게 기본 테이블에서 행의 집합을 검색하는 데 사용할 수 있습니다. SELECT 문의 WHERE 절 대신에 SetRange를 사용하면 인덱스 값을 기초로 행의 집합을 빠르게 검색할 수 있습니다. 예를 들어, 직원 ID가 1부터 5까지인 직원 집합을 검색하려면, SELECT 문을 실행할 수도 있지만 직원 ID 인덱스에서 1부터 5까지의 범위를 설정하면 성능이 크게 향상됩니다.

CommandType이 TableDirect로 설정되고, CommandText가 유효한 기본 테이블 이름으로 설정되며, IndexName이 지정된 기본 테이블의 유효한 인덱스 이름으로 설정된 경우에만 이 메서드를 사용할 수 있습니다. SetRange를 사용하는 경우 ExecuteReader에서 반환된 SqlCeDataReader는 지정된 인덱스의 키 값이 범위와 일치하는 행만 반환합니다.

범위가 있는 SqlCeDataReader에서 Seek를 사용하는 경우 Seek는 지정된 범위의 행에만 배치됩니다. SetRange에 대한 자세한 내용은 OLE DB 문서의 "IRowsetIndex::SetRange" 항목을 참조하십시오.

이 예제에서는 인덱스를 사용하여 Orders 테이블의 데이터를 검색하여 SqlCeDataReader로 가져갑니다. Seek가 검색할 인덱스 범위는 SetRange 메서드에 의해 지정됩니다.

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

참고 항목

참조

SqlCeCommand 클래스

System.Data.SqlServerCe 네임스페이스