SqlCeCommand.SetRange 메서드

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

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

public void SetRange(
	DbRangeOptions dbRangeOptions,
	Object[] startData,
	Object[] endData
)

매개 변수

dbRangeOptions
유형: System.Data.SqlServerCe.DbRangeOptions
범위를 지정할 때 사용하는 옵션입니다.
startData
유형: System.Object[]
범위의 시작 키 값입니다.
endData
유형: System.Object[]
범위의 종료 키 값입니다.

예외조건
InvalidOperationException

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

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

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

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

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

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


표시: