반응형


프로젝트 때문에 글을 많이 올리지 못했네요.

 

Q&A에 오순근 님이 ODBC를 이용한 데이터 원본에 대해 질문해 주셔서 이에 대한 방법을 설명하겠습니다.

 

SQL 2005 SSIS에서는 ODBC를 이용하여 SQL 명령은 실행할 수 있습니다.

하지만, 데이터 흐름 영역에서는 ODBC 데이터 원본 또는 ODBC 데이터 대상이 없습니다.

(수정 : 2007.01.26 : DataReader 원본에서 .NET 공급자\Odbc Data Provider를 이용하여 ODBC 원본을 사용할 수는 있습니다.)

 

이를 구현하기 위해서는 스크립트 구성요소의 원본 기능을 이용해야 합니다.

 

 

다음과 같이 구현하는 예를 설명하겠습니다.

 

SQL Server 2000에 대한 ODBC 연결을 이용하여

SELECT au_id, au_lname FROM pubs.dbo.authors

라는 입력 쿼리의 결과를 이용하는 방법을 설명하겠습니다.

 

[사전 환경]

제어판의 ODBC 관리자에서 테스트용 ODBC 설정을 하나 생성합니다. 본 예제에서는 SS2000_ODBC로 추가하겠습니다.

 

 

1.       빈 패키지 파일을 하나 생성합니다.

2.       화면의 아래 부분에 있는 연결 관리자에서 마우스 오른쪽 버튼을 클릭하여 나타나는 메뉴 중 새 연결(W)를 선택한 후, ODBC 연결을 추가합니다.


 

3.       연결 관리자 창에서 ODBC 연결을 지정합니다.



4.       도구상자에서 데이터 흐름 작업을 추가한 후, 데이터 흐름 영역으로 이동하여 스크립트 구성 요소를 추가합니다. 이 때 유형은 원본으로 선택합니다.



5.       추가한 스크립트 연결을 더블 클릭하여 편집기를 엽니다. 편집기의 연결 관리자 탭에서 추가(A) 버튼을 클릭한 후, 연결 관리자 부분에 2단계에서 추가한 ODBC 연결을 지정합니다.

 

6.       조금 번거로운 작업을 수행해야 하는 단계입니다. /출력 탭에서 출력되는 열에 대한 정의를 추가해줘야 합니다. [출력 0] à [출력 열] 을 선택한 후, 열 추가(C) 버튼을 클릭한 후, 새로운 열을 하나 추가합니다. 이 열의 이름을 au_id로 변경하고 DataType문자열 [DT_STR], Length10로 설정합니다. 동일한 방식으로 au_lname이라는 열을 추가하고 DataType문자열 [DT_STR], Length40으로 설정합니다.



7.       스크립트 탭의 스크립트 디자인(S)를 클릭하여 VSA를 실행시킨 후, 다음 스크립트를 입력합니다. 스크립트에 대한 설명은 주석 부분을 참고하시기 바랍니다.

 

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Imports system.Data.Odbc  ' ODBC 연결을 위해 다음을 포함합니다.

 

 

Public Class ScriptMain

    Inherits UserComponent

 

    Dim odbcConn As OdbcConnection  ' ODBC 연결

    Dim odbcCmd As OdbcCommand      ' ODBC 명령개체

    Dim odbcParam As OdbcParameter  ' ODBC 매개변수개체

    Dim odbcReader As OdbcDataReader    ' ODBC 데이터개체

 

    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

 

        Dim connectionString As String

        connectionString = Me.Connections.연결.ConnectionString

        odbcConn = New OdbcConnection(connectionString)

        odbcConn.Open()

 

    End Sub

 

    Public Overrides Sub PreExecute()

 

        Dim odbcCmd As New OdbcCommand("SELECT au_id, au_lname FROM pubs.dbo.authors", odbcConn)

        odbcReader = odbcCmd.ExecuteReader

 

    End Sub

 

    Public Overrides Sub CreateNewOutputRows()

 

        Do While odbcReader.Read

            With 출력0Buffer

                .AddRow()

                .auid = odbcReader.GetString(0)

                .aulname = odbcReader.GetString(1)

            End With

        Loop

 

    End Sub

 

    Public Overrides Sub PostExecute()

 

        odbcReader.Close()

 

    End Sub

 

    Public Overrides Sub ReleaseConnections()

 

        Me.Connections.연결.ReleaseConnection(odbcConn)

 

    End Sub

 

End Class

 

 

8.       임의의 레코드 대상 또는 플랫 파일 대상 등을 추가하여 생성한 원본과 연결한 후 출력 결과를 확인합니다.

 

 

 

 

 

한대성 DataReader를 이용하여 .NET 공급자\Odbc Data Provider로 ODBC 원본을 구현하는 방법도 있습니다.~^^
(늦게 알았습니다..흑...)
대신 DataReader를 이용한 ODBC 대상은 안되더군요...

참고하세요~~
2007/01/26

 

반응형

+ Recent posts