결과 집합 예제
업데이트: 2006년 7월 17일
경우에 따라서는 쿼리 결과를 읽는 동안 새 연결을 열거나 모든 결과를 메모리로 읽어 오지 않고 명령을 실행하는 것이 유용할 수 있습니다. ADO .NET 2.0의 MARS(Multiple Active Result Set) 기능은 이러한 작업을 가능하게 하는 기술입니다. 현재로서는 서버측 프로그래밍에 사용되는 in-process 공급자에 대해 MARS가 구현되지 않습니다. 이러한 제한을 해결하기 위해 서버측 커서를 사용할 수 있습니다. 이 예제는 서버측 커서를 사용하여 서버측 프로그래밍을 지원하지 않는 MARS의 한계를 극복하는 방법을 보여 줍니다.
[!참고] 서버측 커서를 사용하면 서버 리소스가 상당히 소모되며 간혹 Microsoft SQL Server에서 쿼리 최적화 프로그램이 쿼리 성능을 향상시키는 것을 방해하기도 합니다. 따라서 가능하면 JOIN을 사용하여 코드를 재작성하는 것을 고려해야 할 수 있습니다.
이 클래스에 대한 API는 결과 집합에서 앞으로 또는 뒤로 이동할 수 있다는 점과 결과 집합이 열려 있는 중에도 연결에서 명령을 실행할 수 있다는 점을 제외하면 데이터 판독기와 유사합니다.
이 구현은 예제를 쉽게 이해할 수 있도록 하기 위해 상당 부분 간소화되었습니다. 보다 효율적인 구현은 여러 행을 인출하여 인출된 행당 데이터베이스 반환이 발생하는 것을 피하는 것입니다.
이 클래스를 사용하면 쿼리의 모든 결과로 데이터 집합을 채우는 것보다 메모리 사용량을 크게 줄일 수 있으며 이는 서버측 프로그래밍에서 아주 중요합니다.
이 예제는 "Allow partially trusted callers" 특성을 사용하여 결과 집합 어셈블리가 다른 어셈블리에서 안전하게 호출될 수 있는 라이브러리임을 나타내는 방법도 보여 줍니다. 이 방법은 unsafe
권한을 사용하여 호출 어셈블리를 등록하는 것보다 좀 더 복잡하지만 훨씬 안전합니다. 호출 어셈블리를 safe
로 등록하면 호출 어셈블리가 서버의 리소스에 영향을 주지 않도록 제한하고 서버의 무결성에 손상을 주지 않도록 방지하므로 더 안전합니다.
설치 디렉터리:
drive:\Program Files\Microsoft SQL Server\90\Samples\
Engine\Programmability\CLR\ResultSet\
시나리오
Adventure Works Cycles의 개발자인 Jane은 서버측 쿼리에서 모든 데이터가 반환되기 전에 데이터를 읽고 다른 작업을 수행하는 소프트웨어를 작성해야 합니다.
언어
Transact-SQL, Visual C# 및 Visual Basic
기능
ResultSet 예제는 다음과 같은 SQL Server 기능을 사용합니다.
응용 프로그램 영역 | 기능 |
---|---|
전체 |
CLR, 서버측 커서, Transact-SQL |
필수 구성 요소
이 예제를 실행하기 전에 다음 소프트웨어가 설치되어 있는지 확인하십시오.
- SQL Server 2005 또는 SQL Server 2005 Express Edition(SQL Server Express). SQL Server 2005 Express Edition 설명서 및 예제 웹 사이트에서 무료로 SQL Server Express를 구할 수 있습니다.
- SQL Server 2005에 포함되어 있으며 SQL Server Developer 웹 사이트에서 사용할 수 있는 AdventureWorks 데이터베이스
- SQL Server 2005 데이터베이스 엔진 예제. 이 예제는 SQL Server 2005에 포함되어 있습니다. SQL Server Developer 웹 사이트에서 최신 버전의 예제를 다운로드할 수 있습니다.
- .NET Framework SDK 2.0 또는 Microsoft Visual Studio 2005. .NET Framework SDK는 무료로 구할 수 있습니다. 자세한 내용은 .NET Framework SDK 설치를 참조하십시오.
예제 빌드
강력한 이름 키 파일을 생성하지 않았다면 다음 지침에 따라 해당 키 파일을 생성합니다.
강력한 이름 키 파일을 생성하려면
Microsoft Visual Studio 2005 명령 프롬프트를 엽니다. 시작을 클릭하고 모든 프로그램, Microsoft .NET Framework SDK 2.0을 차례로 가리킨 다음 SDK 명령 프롬프트를 클릭합니다.
-- 또는--
Microsoft .NET Framework 명령 프롬프트를 엽니다. 시작을 클릭하고 모든 프로그램, Microsoft .NET Framework SDK 2.0을 차례로 가리킨 다음 SDK 명령 프롬프트를 클릭합니다.
디렉터리 변경 명령(CD)을 사용하여 명령 프롬프트 창의 현재 디렉터리를 예제가 설치된 폴더로 변경합니다.
[!참고] 예제가 있는 폴더를 확인하려면 시작 단추를 클릭하고 모든 프로그램, Microsoft SQL Server, 설명서 및 자습서를 차례로 가리킨 다음 예제 디렉터리를 클릭하십시오. 기본 설치 위치가 사용된 경우 예제는 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples에 있습니다.
명령 프롬프트에서 다음 명령을 실행하여 키 파일을 생성합니다.
sn -k SampleKey.snk
중요: 강력한 이름 키 쌍에 대한 자세한 내용은 MSDN의 .NET Development Center에서 "Security Briefs: Strong Names and Security in the .NET Framework"를 참조하십시오.
ResultSet 예제를 빌드하려면
Visual Studio 2005 및 제공된 Visual Studio 솔루션을 사용하거나 .NET Framework SDK 2.0에 포함되어 있는 Microsoft MSBuild를 사용하여 예제를 컴파일합니다. 명령 프롬프트에서 다음과 비슷한 명령을 실행합니다.
msbuild /nologo /verbosity:quiet /property:Configuration=Debug CS\ ResultSet.sln
AdventureWorks 데이터베이스가 설치되어 있는지 확인합니다.
SQL Server 데이터베이스 엔진 예제를 기본 위치에 설치하지 않은 경우 예제가 설치된 위치를 나타내도록 Scripts\InstallCS.sql에서 스크립트의 CREATE ASSEMBLY 부분에 포함된 경로를 수정합니다.
사용 중인 SQL Server 인스턴스의 관리자가 아닌 경우 설치를 완료하기 위해 관리자로부터 CreateAssembly 사용 권한을 부여 받아야 합니다.
SQL Server Management Studio에서 Visual C# 프로젝트를 컴파일했는지 또는 Visual Basic 프로젝트를 컴파일했는지에 따라 scripts\installCS.sql 또는 scripts\installVB.sql 파일을 엽니다. 파일에 포함된 스크립트를 실행하거나 명령 프롬프트 창에서 다음과 비슷한 명령을 실행합니다.
sqlcmd -E -I -i Scripts\InstallCS.sql
예제 실행
ResultSet 예제를 실행하려면
Management Studio에서 scripts\test.sql 파일을 열고 파일에 포함된 스크립트를 실행하거나 명령 프롬프트 창에서 다음 명령을 실행합니다.
sqlcmd -E -I -i Scripts\test.sql
예제 제거
ResultSet 예제를 제거하려면
SQL Server Management Studio에서 scripts\cleanup.sql 파일을 열고 파일에 포함된 스크립트를 실행하거나 명령 프롬프트 창에서 다음 명령을 실행합니다.
sqlcmd -E -I -i Scripts\cleanup.sql
설명
이 예제가 제대로 작동되려면 SQL Server 2005 또는 SQL Server Express의 CLR을 설정해야 합니다.
예제는 교육용으로만 제공되므로 프로덕션 환경에서 사용하기에 적합하지 않으며 프로덕션 환경에서 테스트되지 않았습니다. Microsoft에서는 이러한 예제에 대해 기술 지원을 제공하지 않습니다. 시스템 관리자의 허가 없이 프로덕션 SQL Server 데이터베이스 또는 보고서 서버에 예제 응용 프로그램 및 어셈블리를 연결하거나 사용해서는 안 됩니다.
참고 항목
관련 자료
Allowing Partially Trusted Callers
도움말 및 정보
변경 내역
릴리스 | 내역 |
---|---|
2005년 12월 5일 |
|
2006년 7월 17일 |
|