반응형

몇 일 동안 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.    프로그램을 실행한 후, 상단의 텍스트 상자에 여러 국가 명을 입력한 후, 버튼을 클릭해서 테스트를 수행합니다.

  

 

 

 

반응형

+ Recent posts