몇 일 동안 DataReader 대상을 이용할 수 있는 방법이 없을까 찾다가, 좋은 예를 찾았습니다. BOL에서는 레포팅 서비스 등에서 이용 가능하다고만 나와 있는데, PC에 레포팅 서비스 설치도 안되어 있어서, VB.net을 이용하는 방식으로 만들어 보았습니다..
(물론~!! 제가 100% 순수 창작한 것은 절대 아닙니다. MSDN 영문판에 2006년 4월 14일자로 추가된 것을 좀 자세히 단계별로 나타낸 것일 뿐 입니다…^^)
VB.net 이 깔려있는 경우, 한 번 따라 해 보시기 바랍니다. 상당히 유용할 것 같은 기분이~~~
따라하기 – DataReader 대상 이용하기
DataReader 대상을 이용하여 구현된 SSIS 패키지를 VB.net 응용 프로그램에서 호출하는 간단한 예제입니다.
[테스트 용 SSIS 패키지 작성 부분]
1. DataReaderSample.dtsx 라는 이름의 빈 SSIS 패키지를 하나 추가합니다.
2. 도구 상자에서 데이터 흐름 작업을 하나 추가합니다.
3. OLE DB 원본을 추가하고, localhost 의 AdventureWorks DB를 지정하도록 설정합니다.
이 때, OLE DB 원본 편집기의 데이터 액세스 모드는 SQL 명령으로 지정합니다.
4. OLE DB 원본 편집기의 SQL 명령 텍스트에 다음과 같은 쿼리를 입력합니다.
SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?
5. 오른쪽에 있는 매개 변수(P) 버튼을 누른 후, 변수 부분에서 <새 변수..>를 클릭합니다.
6. 변수 추가 창에서 네임스페이스(S)에 DtsClient로 입력하고, 이름(N)을 Country로 입력합니다.
7. 확인을 눌러 OLE DB 원본 편집기를 닫습니다.
8. 데이터 흐름 변환에서 집계 변환 작업을 추가한 후, OLE DB 원본의 녹색 선을 연결합니다.
9. 집계 변환 편집기를 연 후, 사용 가능한 입력 열을 (*)로 선택합니다.
10. 데이터 흐름 대상에서 DataReader 대상을 추가하고 집계 변환 작업의 녹색 선을 연결합니다. 그런 후, DataReader 대상의 이름을 DataReaderDest로 변경합니다.
11. DataReaderDest를 더블 클릭하여 고급 DataReaderDest 편집기를 연 후, 입력 열 탭에서 Count all을 선택하고, 출력 별칭을 NO로 변경합니다.
12. 이 패키지를 D:\DataReaderSample.dtsx로 저장합니다.
[테스트 용 VB.net 어플리케이션 작성 부분]
ADO.NET을 이용하는 어플리케이션이나 서비스는 여러 가지가 있을 수 있지만, 여기서는 VB.net을 이용한 어플리케이션을 이용하여 작성해 보겠습니다.
13. Microsoft Visual Studio 에서 Visual Basic / Window 응용 프로그램 프로젝트를 하나 엽니다.
14. 상단 메뉴 중, 프로젝트(P) à 참조 추가(R).. 을 선택하여 참조 추가 창을 연 후, 찾아보기 탭에서 다음을 추가합니다.
%ProgramFiles%\Microsoft SQL Server\90\DTS\Binn 에서
Microsoft.SqlServer.Dts.DtsClient.dll 를 선택
15. Form1 에 텍스트 상자 두 개를 추가하고, 하나는 txtCountry, 다른 하나는 txtResults 로 이름을 변경합니다. 또한 버튼을 하나 추가한 후, 이름을 btnResult 로 변경합니다.
16. Button1의 코드 부분에 다음과 같이 추가합니다.
Imports System.Data Imports Microsoft.SqlServer.Dts.DtsClient Public Class Form1 Private Sub btnResult_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResult.Click Dim dtexecArgs As String Dim dataReaderName As String Dim countryName As String Dim dtsConnection As DtsConnection Dim dtsCommand As DtsCommand Dim dtsDataReader As IDataReader Dim dtsParameter As DtsDataParameter Windows.Forms.Cursor.Current = Cursors.WaitCursor dtexecArgs = "/FILE ""D:\DataReaderSample.dtsx""" dataReaderName = "DataReaderDest" countryName = txtCountry.Text dtsConnection = New DtsConnection() With dtsConnection .ConnectionString = dtexecArgs .Open() End With dtsCommand = New DtsCommand(dtsConnection) dtsCommand.CommandText = dataReaderName dtsParameter = New DtsDataParameter("Country", DbType.String) dtsParameter.Direction = ParameterDirection.Input dtsCommand.Parameters.Add(dtsParameter) dtsParameter.Value = countryName dtsDataReader = dtsCommand.ExecuteReader(CommandBehavior.Default) With dtsDataReader .Read() txtResults.Text = .GetInt32(0).ToString("N0") End With 'After reaching the end of data rows, ' call the Read method one more time. Try dtsDataReader.Read() Catch ex As Exception MessageBox.Show("다음 메서드를 호출하는 중 예외 에러가 발생되었습니다. :" & ControlChars.CrLf & _ ex.Message & ControlChars.CrLf & _ ex.InnerException.Message, "마지막으로 호출된 메서드는 다음과 같습니다. ", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try ' The following method is a best practice, and is ' required when using DtsDataParameter objects. dtsCommand.Dispose() Try dtsDataReader.Close() Catch ex As Exception MessageBox.Show("DataReader를 닫는 중 예외 발생:" & ControlChars.CrLf & _ ex.Message & ControlChars.CrLf & _ ex.InnerException.Message, "DataReader를 닫는 중 예외 발생", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Try dtsConnection.Close() Catch ex As Exception MessageBox.Show("연결을 닫는 중 예외 발생:" & ControlChars.CrLf & _ ex.Message & ControlChars.CrLf & _ ex.InnerException.Message, "연결을 닫는 중 예외 발생", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Windows.Forms.Cursor.Current = Cursors.Default End Sub End Class |
17. 프로그램을 실행한 후, 상단의 텍스트 상자에 여러 국가 명을 입력한 후, 버튼을 클릭해서 테스트를 수행합니다.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
기본 강좌 24 - UNION ALL, 정렬, 집계 변환 (0) | 2009.06.20 |
---|---|
기본 강좌 23 - OLE DB 명령 변환 (0) | 2009.06.20 |
기본 강좌 22 - 데이터 흐름 대상 (0) | 2009.06.20 |
기본 강좌 21 - 데이터 흐름 원본 (0) | 2009.06.20 |
기본 강좌 20 - 웹 서비스 작업 (0) | 2009.06.20 |