2단원: 웹 서비스에서 ADO.NET 데이터 집합에 대한 보고서 데이터 집합 정의
새 설치: 2006년 7월 17일
이 단원에서는 XML System.Data.DataSet 개체를 반환하는 웹 서비스에 대한 데이터 원본 연결을 만들고, XML System.Data.DataSet 개체를 반환하는 웹 서비스를 만들어 배포하거나 사용 가능한 기존 웹 서비스를 사용할 수 있습니다. 또한 웹 서비스에서 반환한 XML System.Data.DataSet의 보고서 데이터 집합에 대해 검색할 데이터를 지정하는 쿼리 문자열을 정의합니다.
이 자습서의 경우 웹 서비스에서 AdventureWorks 예제 데이터베이스의 저장 프로시저 uspGetEmployeeManagers를 호출하는 직원 및 관리자 정보를 검색합니다. 이 저장 프로시저는 EmployeeID 값을 허용하여 직원-관리자 관계를 재귀적으로 최상위 직원에게 보여 주는 결과 집합을 생성합니다.
절차
(옵션) ADO.NET 데이터 집합을 반환하는 웹 서비스를 만들려면
Microsoft Visual Studio의 파일 메뉴에서 새로 만들기를 클릭한 다음 웹 사이트를 클릭합니다.
새 웹 사이트 대화 상자가 열립니다.
[!참고] 웹 사이트가 옵션으로 표시되지 않는 경우 자습서: 보고서에서 XML 데이터 사용에서 요구 사항 섹션을 확인하십시오.
템플릿 창에서 ASP.NET 웹 서비스를 선택합니다.
위치 드롭다운 목록에서 HTTP를 선택합니다.
언어 드롭다운 목록에서 Visual Basic 또는 **C#**을 선택합니다.
찾아보기 단추를 클릭합니다.
위치 선택 대화 상자가 열립니다.
웹 열기 사이트 창에서 로컬 IIS 단추가 선택되어 있는지 확인합니다.
웹 사이트 트리 컨트롤에서 새 웹 사이트에 대한 부모 폴더로 이동합니다.
새 웹 응용 프로그램 만들기 단추를 클릭합니다.
웹 사이트에 대한 이름을 입력합니다.
열기를 클릭합니다.
확인을 클릭합니다.
4단계에서 선택한 프로그래밍 언어에 대한 App_Code/Service 코드 페이지가 Visual Studio에서 열리며 WebMethod HelloWorld 예제가 표시됩니다.
[!참고] 기본 네임스페이스는
http://tempuri.org/
입니다. 이 네임스페이스는 아래 보고서 데이터 집합을 정의할 때 쿼리에서 사용합니다. 이 기본값을 변경할 경우 쿼리를 변경해야 합니다.Visual Basic 또는 C#에 대한 원본 파일의 맨 위에 다음 두 개의 네임스페이스 참조를 추가합니다.
using System.Data; using System.Data.SqlClient;
Imports System.Data Imports System.Data.SqlClient
HelloWorld WebMethod를 다음 Visual Basic이나 C# 코드로 바꿉니다.
[WebMethod] public DataSet GetEmployeeManagers(String EmployeeID) { Int32 val = Int32.Parse(EmployeeID); DataSet ds = new DataSet("Results"); try { if (val < 1) val = 1; else if (val > 290) val = 290; SqlDataAdapter da = new SqlDataAdapter(@"uspGetEmployeeManagers " + val.ToString(), @"Data Source=localhost; Initial Catalog=AdventureWorks; " + @"Integrated Security=true"); da.Fill(ds); } catch (Exception e) { throw; } return ds; }
<WebMethod()> _ Public Function GetEmployeeManagers(ByVal EmployeeID As String) As DataSet Dim ds As DataSet = New DataSet("Results") Try Dim val As Integer = Integer.Parse(EmployeeID) If (val < 1) Then val = 1 ElseIf (val > 290) Then val = 290 End If Dim da As SqlDataAdapter = _ New SqlDataAdapter("uspGetEmployeeManagers " + _ val.ToString(), _ "Data Source=localhost; Initial Catalog=AdventureWorks; " + _ "Integrated Security=true") da.Fill(ds) Catch e As Exception Throw End Try Return ds End Function
빌드 메뉴에서 웹 사이트 빌드를 클릭합니다.
빌드 메뉴에서 웹 사이트 게시를 클릭합니다.
(옵션) 게시된 웹 서비스를 테스트하려면
Internet Explorer를 엽니다.
주소 표시줄에 웹 서비스 URL을 입력합니다.
예를 들어 https://localhost/XMLTutorial/Service.asmx를 입력합니다.
웹 서비스 기본 페이지가 표시됩니다.
GetEmployeeManagersFromAdventureWorks를 클릭합니다.
1에서 290 사이의 EmployeeID 값을 입력합니다.
호출을 클릭합니다.
웹 서비스에서는 uspGetEmployeeManagers 저장 프로시저를 사용하여 AdventureWorks 데이터베이스의 직원 관리자가 있는 데이터 집합을 검색합니다.
[!참고] "개체에 대한 실행 권한이 거부되었습니다"라는 메시지가 표시될 경우 다음 절차에서 설명하는 대로 ASPNETUser에 대한 AdventureWorks 저장 프로시저의 실행 권한을 부여해야 합니다.
(옵션) 저장 프로시저에 대한 실행 권한을 부여하려면
Microsoft SQL Server Management Studio를 엽니다.
AdventureWorks 예제 데이터베이스가 설치된 데이터베이스 엔진에 연결합니다.
개체 탐색기에서 데이터베이스 노드를 확장한 다음 AdventureWorks 노드, 프로그래밍 기능 노드, 저장 프로시저 노드를 차례로 확장합니다.
dbo.uspGetEmployeeManagers를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.
페이지 선택 창에서 사용 권한을 클릭합니다.
사용자 또는 역할 창에서 추가 단추를 클릭합니다.
찾아보기 단추를 클릭합니다. [ASPNETUser]를 선택합니다.
확인을 클릭합니다.
ASP.NET을 실행하는 사용자가 uspGetEmployeeManagers 저장 프로시저를 실행하도록 사용 권한을 추가했습니다.
웹 서비스에 대한 보고서 데이터 집합을 정의하려면
보고서 디자이너를 시작하고 이 자습서에 대해 만든 보고서 서버 프로젝트를 엽니다.
데이터 뷰에서 새 데이터 집합을 선택합니다. XMLWebDataSet과 같은 데이터 집합 이름을 입력합니다.
데이터 집합 대화 상자의 데이터 원본에서 새 데이터 원본을 선택합니다. 데이터 원본 대화 상자가 표시됩니다.
XMLWebDataSource와 같은 데이터 원본 이름을 입력합니다.
유형에서 XML을 선택합니다.
연결 문자열에서 다음 보고서 서버 웹 서비스 URL을 입력합니다.
https://localhost/XMLTutorial/Service.asmx
자격 증명 탭에서 **Windows 인증 사용(통합 보안)**을 선택합니다.
확인을 클릭하여 변경 내용을 저장하고 데이터 원본 대화 상자를 닫습니다.
보고서 메뉴에서 보고서 매개 변수를 클릭합니다. 보고서 매개 변수 대화 상자가 열립니다.
추가를 클릭합니다.
속성 섹션의 이름 입력란에 EmployeeID를 입력합니다.
프롬프트 입력란에 Employee ID를 입력합니다.
확인을 클릭합니다.
데이터 탭의 도구 모음에서 선택한 데이터 집합 편집(…) 단추를 클릭합니다. 데이터 집합 대화 상자가 열립니다.
매개 변수 탭을 클릭합니다.
이름 열에 EmployeeID를 입력합니다.
값 텍스트 상자를 클릭하여 드롭다운 목록을 활성화하고 =Parameters!EmployeeID.Value를 선택합니다. 이렇게 하면 데이터 집합 매개 변수가 보고서 매개 변수에 매핑됩니다.
확인을 클릭합니다.
1단계에서 확인한 네임스페이스 버전 정보를 사용하여 데이터 집합 대화 상자에 다음 쿼리를 입력합니다.
<Query> <SoapAction> http://tempuri.org/GetEmployeeManagers </SoapAction> <Method Namespace="http://tempuri.org/" Name="GetEmployeeManagers"> </Method> </Query>
도구 모음에서 실행(!) 단추를 클릭합니다. 쿼리 매개 변수 정의 대화 상자가 열립니다.
매개 변수 값 열에 1과 290 사이의 EmployeeID 번호를 입력합니다.
확인을 클릭합니다. 데이터 집합이 데이터 집합 창에 추가됩니다.
결과 집합을 검사합니다. 기본적으로 쿼리는 데이터 집합에서 찾을 수 있는 첫 번째 XML 경로에 있는 리프 노드까지 모든 XML 요소 및 특성에서 데이터를 추출합니다.
<Query> 태그 바로 뒤에 있는 쿼리 창에 다음 ElementPath를 붙여 넣습니다.
<ElementPath IgnoreNamespaces="True"> GetEmployeeManagersResponse {}/ GetEmployeeManagersResult/diffgram{}/ Results {}/Table </ElementPath>
그러면 결과 집합의 데이터를 검색하는 데 사용할 요소를 지정하는 요소 경로가 쿼리에 제공됩니다. 이 경우 GetEmployeeManagersResponse, GetEmployeeManagersResult, diffgram 및 Results 노드 뒤의 빈 중괄호({})는 모두 이러한 노드의 데이터를 건너뛸 것을 쿼리에 지시합니다. 중괄호가 없는 Table 노드는 해당 노드의 모든 노드와 특성을 검색할 것을 쿼리에 지시합니다.
[!참고] 데이터 집합 필드 컬렉션에 대해 검색할 Table 요소를 지정하려면 다음 예와 같이 Table 뒤의 중괄호 안에 해당 요소를 나열합니다.
Table {FirstName, LastName, EmployeeID, ManagerID, RecursionLevel}
.**실행(!)**을 클릭하여 결과 집합을 봅니다. ElementPath 요소의 변경 내용은 쿼리가 반환한 결과 집합을 변경합니다.
결과 집합에 문제가 없으면 도구 모음에서 필드 새로 고침() 단추를 클릭합니다. 이렇게 하면 보고서 정의가 저장되고 보고서 데이터 집합 창에서 필드 보기가 업데이트되어 사용할 수 있는 모든 필드가 표시됩니다.
다음 단계
웹 서비스에서 반환한 XML System.Data.DataSet object에서 보고서 데이터 집합을 성공적으로 정의했습으며 보고서가 처리될 때 각 XML 테이블 요소 및 해당 특성의 데이터를 웹 서비스에서 검색할 수 있습니다. 다음 단원에서는 보고서에 포함된 XML에서 보고서 데이터 집합을 만듭니다. 3단원: 포함 XML 데이터에서 보고서 데이터 집합 정의를 참조하십시오.
참고 항목
개념
관련 자료
XML 데이터의 보고서 데이터 집합 정의
데이터 원본에 연결
보고서 데이터 집합 정의
방법: 보고서별 데이터 원본 만들기 또는 편집(보고서 디자이너)
방법: 데이터 집합 만들기(보고서 디자이너)
보고서 데이터 집합의 필드 작업
방법: 데이터 집합 창에서 필드 추가, 편집 또는 삭제(보고서 디자이너)
보고서 데이터 집합(보고서 디자이너)