데이터 집합을 채우기 위한 도우미 클래스 작성
고객 테이블에 대해 방금 작성한 데이터 집합 스키마는 데이터 구조입니다. 런타임에는 데이터 집합 구조를 데이터베이스의 데이터로 채우기 위한 코드가 필요합니다. 이 부분에서는 데이터 집합을 데이터로 채우는 도우미 클래스를 만듭니다.
데이터 집합을 데이터로 채우기 위한 도우미 클래스를 만들려면
솔루션 탐색기에서 굵게 표시된 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 항목 추가를 클릭합니다.
새 항목 추가 대화 상자의 Visual Studio에 설치되어 있는 템플릿 목록에서 클래스를 선택합니다.
이름 필드에 "DataSetConfiguration"을 입력하고 추가를 클릭합니다.
참고 클래스를 "Code"라는 디렉터리에 저장할지 묻는 대화 상자가 나타나면 예를 클릭합니다.
클래스 서명 위에서 System.Data 및 System.Data.OleDb 네임스페이스에 대한 "Imports"[Visual Basic] 또는 "using"[C#] 선언을 클래스 위에 추가합니다.
Imports System.Data Imports System.Data.OleDb
using System.Data; using System.Data.OleDb;
클래스의 맨 위에서 Xtreme 샘플 데이터베이스에 대한 연결 문자열을 저장하기 위한 CONNECTION_STRING이라는 상수를 만듭니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>아래 코드에서는 Crystal Reports for Visual Studio 2005의 샘플 데이터베이스 위치를 사용합니다. xtreme.mdb 데이터베이스의 파일 디렉터리 경로가 올바른지 확인하려면 <a href="ms225530(v=vs.90).md">"Xtreme 샘플 데이터베이스 위치"</a>를 참조하십시오.</p></td>
</tr>
</tbody>
</table>
``` vb
Private Const CONNECTION_STRING As String ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Microsoft Visual Studio 8\Crystal Reports\Samples\En\Database\xtreme.mdb"
```
``` csharp
private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Program Files\\Microsoft Visual Studio 8\\Crystal Reports\\Samples\\En\\Database\\xtreme.mdb";
```
- 첫 번째 상수 아래에서 데이터베이스 쿼리 문자열을 저장하기 위한 QUERY_STRING이라는 두 번째 상수를 만듭니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>이 간단한 쿼리 문자열은 기준을 설정하지 않은 채 모든 열을 선택합니다. Xtreme 샘플 데이터베이스의 경우에는 이 쿼리에서 소량의 데이터만 반환됩니다. 그러나 대부분의 경우에는 WHERE 절을 포함하고 한정된 개수의 열을 선택하여 쿼리를 제한하는 것이 좋습니다.</p></td>
</tr>
</tbody>
</table>
``` vb
Private Const QUERY_STRING As String = "SELECT * FROM CUSTOMER"
```
``` csharp
private const string QUERY_STRING = "SELECT * FROM CUSTOMER";
```
- 데이터 집합에 채울 DataTable의 이름을 저장하기 위한 DATATABLE_NAME이라는 세 번째 상수를 두 번째 상수 아래에 만듭니다.
다음은 DIRECTORY\_FILE\_PATH 상수를 만드는 단계입니다. 이 상수는 Visual Studio 2005에서 웹 사이트를 만드는 경우에만 필요합니다. 다른 경우에는 이 단계를 건너뜁니다.
``` vb
Private Const DATATABLE_NAME As String = "Customer"
```
``` csharp
private const string DATATABLE_NAME = "Customer";
```
- xsd 파일의 디렉터리 경로 위치를 가리키는 DIRECTORY_FILE_PATH라는 네 번째 상수를 세 번째 상수 아래에 만듭니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>아래 코드에서는 웹 사이트 경로를 보여 줍니다.</p></td>
</tr>
</tbody>
</table>
``` vb
Private Const DIRECTORY_FILE_PATH As String = "C:\WebSites\VB_Web_Data_DataSets\"
```
``` csharp
private const string DIRECTORY_FILE_PATH = @"C:\WebSites\CS_Web_Data_DataSets\";
```
데이터 집합을 채우는 속성을 만들려면
- DataSet 인스턴스를 반환하는 CustomerDataSet이라는 읽기 전용 속성을 만듭니다. 클래스와 속성을 인스턴스화하지 않고도 직접 호출할 수 있도록 메서드에 "Shared"[Visual Basic] 또는 "static"[C#] 한정자를 지정합니다.
``` vb
Public Shared ReadOnly Property CustomerDataSet() As DataSet
Get
End Get
End Property
```
``` csharp
public static DataSet CustomerDataSet
{
get
{
}
}
```
이 단계를 수행하는 방법은 두 가지입니다. 하나는 Windows 프로젝트에 사용할 수 있는 강력한 형식의 DataSet 클래스와 함께 사용하는 방법이고, 다른 하나는 웹 사이트에 사용할 수 있는 일반적인 DataSet 클래스와 함께 사용하는 방법입니다.
강력한 형식의 DataSet 클래스를 사용하는 Windows 프로젝트의 경우 CustomerDataSet 속성의 get 절 안에서 CustomerDataSetSchema 클래스(이전 부분에서 데이터 집합 스키마에서 생성한 강력한 형식의 DataSet 클래스)를 선언하고 인스턴스화합니다.
Dim myDataSet As CustomerDataSetSchema = New CustomerDataSetSchema()
CustomerDataSetSchema dataSet = new CustomerDataSetSchema();
일반적인 DataSet 클래스를 사용하는 웹 사이트 프로젝트의 경우 CustomerDataSet 속성의 get 절 안에서 DataSet 클래스를 선언하고 인스턴스화한 다음 XML 스키마를 DataSet 인스턴스에 적용합니다. 즉, CustomerDataSetSchema.xsd의 파일 디렉터리 경로를 DataSet 인스턴스의 ReadXmlSchema() 메서드에 문자열 매개 변수로 전달합니다.
Dim myDataSet As DataSet = New DataSet() myDataSet.ReadXmlSchema(DIRECTORY_FILE_PATH & "XMLSchema.xsd")
DataSet dataSet = new DataSet(); dataSet.ReadXmlSchema(DIRECTORY_FILE_PATH + "XMLSchema.xsd");
OleDbConnection 클래스를 선언하여 인스턴스화하고 여기에 CONNECTION_STRING 상수를 메서드 매개 변수로 전달합니다.
Dim myOleDbConnection As OleDbConnection = New OleDbConnection(CONNECTION_STRING)
OleDbConnection oleDbConnection = new OleDbConnection(CONNECTION_STRING);
OleDbDataAdapter 클래스를 선언하여 인스턴스화하고 여기에 QUERY_STRING 상수와 OleDbConnection 인스턴스를 메서드 매개 변수로 전달합니다.
Dim myOleDbDataAdapter As OleDbDataAdapter = New OleDbDataAdapter(QUERY_STRING, myOleDbConnection)
OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(QUERY_STRING, oleDbConnection);
OleDbDataAdapter 인스턴스의 Fill() 메서드를 호출하여 CustomerDataSetSchema 인스턴스와 DATATABLE_NAME 상수를 전달합니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Fill() 메서드는 데이터베이스에서 검색된 데이터를 사용하여 DataSet 인스턴스 내에서 지정된 DataTable을 채웁니다.</p></td>
</tr>
</tbody>
</table>
``` vb
myOleDbDataAdapter.Fill(myDataSet, DATATABLE_NAME)
```
``` csharp
oleDbDataAdapter.Fill(dataSet, DATATABLE_NAME);
```
- DataSet 인스턴스를 반환하여 이 속성을 완료합니다.
``` vb
Return myDataSet
```
``` csharp
return dataSet;
```
CustomerDataSet 속성이 생성되고 프로젝트의 아무 위치에서나 이 속성을 호출할 수 있습니다.