커서 유형

Microsoft SQL Server Compact 4.0 커서는 SQL Server에서 사용되는 커서와 비슷합니다. 이 섹션에서는 두 커서의 차이점에 대해 설명합니다. 데이터베이스 커서에 대한 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.

SQL Server Compact 4.0는 다음 유형의 커서를 지원합니다.

  • 기본 테이블

  • 정적

  • 정방향 전용

  • 정방향 전용/읽기 전용

  • 키 집합

기본 테이블 커서는 가장 단순한 수준의 커서입니다. 이러한 커서는 저장소 엔진에 대해 직접 작동하며 지원되는 모든 커서 유형 중 가장 빠릅니다. 기본 테이블 커서는 최소 비용으로 앞으로 스크롤 또는 뒤로 스크롤할 수 있으며 업데이트할 수 있습니다.

또한 인덱스에서 직접 커서를 열 수도 있습니다. 인덱스를 사용하면 테이블의 행을 정렬하고, 특정 값을 검색하며, 인덱스 내 값 범위를 기준으로 행을 제한할 수 있습니다.

기본 테이블 커서는 동적인 멤버 자격을 가집니다. 즉, 같은 테이블에서 열린 두 커서는 같은 트랜잭션 범위에 있는 것으로 간주되어 데이터의 삽입, 삭제 및 변경을 직접 확인할 수 있습니다. 기본 테이블 커서는 업데이트할 수 있기 때문에 클라이언트는 이러한 유형의 커서를 사용하여 기본 데이터를 변경할 수 있습니다.

기본 테이블 커서는 쿼리 결과를 나타낼 수 없습니다. SELECT * FROM tablename 같은 쿼리 결과는 기본 테이블 커서를 통해 반환되지 않습니다. 대신 지원되는 쿼리 결과 커서 중 하나가 사용됩니다.

다음은 ADO.NET을 사용하여 기본 테이블 커서를 불러오는 방법을 보여 주는 예입니다.

//Base Table Cursor

cmd.CommandText = "tablename";

cmd.CommandType = CommandType.TableDirect;

SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);

다음은 ADO.NET을 사용하여 인덱스 커서를 불러오는 방법을 보여 주는 예입니다.

cmd.CommandText = "tablename";

cmd.IndexName = "indexname";

cmd.CommandType = CommandType.TableDirect;

SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);

이전 버전의 SQL Server Compact 4.0에서 스크롤형 쿼리 커서라고 불렸던 정적 커서는 결과 집합의 전체 복사본을 만들고 저장합니다. 단, 사용자가 명시적으로 요청한 경우 검색되는 Long 값 데이터는 예외입니다. 이 결과 집합은 필요한 경우에만 채워집니다. 이 점이 커서를 생성할 때 결과 집합을 채우는 SQL Server와의 차이점입니다. 정적 커서는 뒤로 스크롤 및 앞으로 스크롤을 지원하지만 업데이트는 지원하지 않습니다. 정적 커서는 Insensitive 데이터의 외부 변경 내용을 확인하지 않습니다. 쿼리 결과는 커서의 작동 기간 동안 캐시됩니다. 정적 커서의 경우 기능적인 면에서는 정방향 전용 커서보다 뛰어나지만 속도는 더 느리고 메모리를 더 많이 사용한다는 단점이 있습니다. 스크롤 기능이 필요한데 키 집합 커서의 사용은 적합하지 않은 경우에만 정적 커서를 사용하는 것이 좋습니다.

다음 예에서는 ADO.NET을 사용하여 정적 커서를 불러오는 방법을 보여 줍니다.

cmd.CommandText = "Select * from tablename";

SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Insensitive);

정방향 전용 커서는 속도면에서는 가장 빠른 커서로, 업데이트가 가능하지만 스크롤은 지원하지 않습니다. 커서의 시작부터 끝까지 연속으로 행을 인출하는 기능만 지원합니다. 행이 인출되어야 데이터베이스에서 검색됩니다. 현재 사용자가 만들거나 다른 사용자가 커밋하여 결과 집합의 행에 영향을 주는 모든 INSERT, UPDATEDELETE 문의 결과는 행이 커서에서 인출될 때 표시됩니다. 이 커서는 뒤로 스크롤할 수 없기 때문에 행이 인출된 후 데이터베이스에서 변경한 행은 커서를 사용하여 표시할 수 없습니다.

정방향 전용 및 정방향 전용/읽기 전용 커서는 가장 빠른 쿼리 기반 커서입니다. 따라서 이 커서는 속도와 메모리 사용이 가장 중요한 시나리오에서 사용하는 것이 좋습니다.

다음은 ADO.NET을 사용하여 정방향 전용 커서를 불러오는 방법을 보여 주는 예입니다.

cmd.CommandText = "Select * from tablename";

SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Updatable);

이전 버전의 SQL Server Compact 4.0에서 정방향 전용 커서라고 불렸던 정방향 전용/읽기 전용 커서는 가장 빠른 커서지만 업데이트할 수 없습니다.

다음 예에서는 ADO.NET을 사용하여 정방향 전용/읽기 전용 커서를 불러오는 방법을 보여 줍니다.

cmd.CommandText = "Select * from tablename";

SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.None);

참고 모든 SQL Server Compact 4.0 커서는 내부에서 업데이트할 수 있으므로 읽기 전용 열만 반환하는 쿼리에는 읽기 전용 커서를 만들 수 없습니다. SQL Server Compact 4.0에서는 SqlCeResultSet에 반환되는 읽기 전용 열을 업데이트할 수 없습니다. 따라서 "업데이트할 수 있는 열이 없기 때문에 쿼리에 대해 업데이트 가능한 커서를 생성할 수 없습니다"라는 오류 메시지가 표시되고 실행되지 않습니다.

SQL Server Compact 4.0의 키 집합 커서는 업데이트할 수 있는 스크롤형 커서입니다. 키 집합 커서는 키 집합이라는 물리적 식별자 집합에 의해 제어됩니다. 키 집합은 커서가 열려 있을 때 SELECT 문의 조건에 맞는 모든 행을 기반으로 합니다. 키 집합은 커서를 열 때 임시 테이블에 만들어집니다. 키 집합 커서를 사용하면 쿼리가 실행될 때 멤버 자격이 결정됩니다.

SQL Server Compact 4.0의 키 집합 커서는 SQL Server의 키 집합 커서와 약간 다릅니다. SQL Server에서 키 집합 커서는 키 집합의 키처럼 고유 식별자 집합을 사용합니다. SQL Server Compact 4.0에서 키는 값이 테이블에 논리적으로 저장되는 책갈피이며 키가 고유 식별자는 아닙니다.

키 집합 커서는 여러 가지 변경의 영향을 받지만 다른 커서만큼 민감하지는 않습니다. 예를 들어 커서 내부의 삽입은 끝에 표시되지만 커서 외부의 삽입은 표시되지 않습니다. 이런 경우 커서를 닫았다가 다시 열거나 정방향 전용 커서 중 하나를 사용하는 것이 좋습니다.

SQL Server Compact 4.0에서는 책갈피를 사용하여 키 집합을 정의하므로 키 집합에 포함된 행에 대한 모든 데이터 값 변경 내용은 커서를 사용하여 표시할 수 있습니다. 이 사항은 커서 내부의 변경 내용과 커서 외부의 변경 내용에 모두 적용됩니다.

커서 내부인지 외부인지에 관계없이 키 집합 커서에서 삭제를 수행할 경우 행을 인출하려고 시도하면 행이 삭제된 것으로 보고됩니다.

다음 예에서는 ADO.NET을 사용하여 키 집합 커서를 불러오는 방법을 보여 줍니다.

cmd.CommandText = "Select * from tablename";

SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);

조인 작업

키 집합 커서를 여는 데 사용하는 쿼리에 조인된 열이 있으면 이러한 열은 업데이트할 수 없습니다. 사용자는 이러한 열에 새 값을 삽입할 수 있지만 업데이트는 지원되지 않습니다.

DataGrid 개체처럼 사용자가 업데이트할 수 있는 컨트롤을 채우는 데 키 집합을 사용하는 경우 사용자는 컨트롤의 값을 업데이트하려고 시도할 수 있지만 업데이트는 실행되지 않습니다. 조인된 열을 표시하는 데 DataGrid를 사용하는 응용 프로그램을 개발하려는 경우에는 DataGrid의 조인된 열을 읽기 전용으로 설정해야 합니다.

표시: