.NET 애플리케이션에서 패키지를 실행할 때 SSIS 패키지 동적 .mdb 연결을 설정하는 방법

StackOverflow https://stackoverflow.com/questions/835765

문제

현재 백엔드에서 .mdb (Access) 데이터베이스 파일을 사용하는 vb.net 데스크탑 응용 프로그램에서 작업 중입니다. .mdb 파일은 vb.net 앱에서 열리고 편집됩니다. 편집이 완료되면 사용자는 데이터를 SQL Server 데이터베이스로 가져와야합니다. 동적 파일 패스 시나리오를 소개하려고 할 때까지 이것은 쉬운 일입니다.

나는 SSI에 대한 경험이 상당히 많지만 이것에 접근하는 데 어려움을 겪고 있습니다. 사용자가 선택한 .mdb 파일을 탐색 할 수있는 winform을 만들었습니다. .MDB 파일 이름에는 타임 스탬프/날짜 정보가있어 독특하게 만들 수 있습니다. (나는 앱 의이 부분을 개발하지 않았다. 최근에 이것에 대해 작업을 시작했기 때문에 문제가있다. 나는 .mdb filename을 타임 스탬프하지 않겠다.

어쨌든, 나는 파일 이름과 경로를 동적으로 SSIS 패키지로 전달해야합니다. ConnectionString 등을위한 변수를 만드는 위치를 알 수 있지만 세부 사항과 MS Access (OLE DB, ODBC 또는 JET 4.0에 어떤 유형의 데이터 연결을 사용해야하는지 확실하지 않습니다. !)

패키지가 .mdb 파일을 소스로 사용하므로 데이터 연결 문자열이 동적이어야한다고 가정합니다. 그러나 .mdb 파일의 SSIS에서 동적 데이터 연결을 어떻게 작성합니까?

Filename/Path String을 내 SSIS 패키지에 어떻게 전달합니까?

현재이 코드로 프로토 타이핑을하고 있습니다.

    'Execute the SSIS_Import package 
    Dim pkgLocation As String
    Dim pkg As New Package
    Dim app As New Microsoft.SqlServer.Dts.Runtime.Application
    Dim pkgResults As DTSExecResult
    Dim eventListener As New EventListener()

    Try
        pkgLocation = "C:\SSIS_DataTransfer\ImportPackage.dtsx"

        'TO-DO: pass databasePath variable to SSIS package here ???
        pkg = app.LoadPackage(pkgLocation, eventListener)
        pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)

        Select Case pkgResults

            Case DTSExecResult.Completion
                MsgBox("Data import completed!")

            Case DTSExecResult.Success
                MsgBox("Data import was successful!")

            Case DTSExecResult.Failure
                MsgBox("Data import was not successful!")

        End Select

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
  1. .mdb 파일 위치를 내 SSIS 패키지로 어떻게 전달합니까? LoadPackage 어쩌면?
  2. SSIS 패키지의 데이터 연결에서 동적 파일 위치를 어떻게 사용합니까?

동적이 아닌 .mdb 파일을 업로드하는 것은 매우 간단합니다. 사용자 선택의 동적 측면을 도입 할 때까지 소스와 대상을 설정하는 것은 매우 쉽습니다. SSIS에서 이것이 어떻게 가능합니까?

모든 도움은 대단히 감사합니다. 고맙습니다.

도움이 되었습니까?

해결책

사용하는 연결 및 실행 방법에 따라 일부 변경 사항이 변경되지만 기본적으로 변수를 패키지에 넣는 것은 동일합니다. SSI를 사용한 지 오래되었습니다. 그러나 초기 단계를 파악하면 대부분 간단합니다.

패키지에 변수를 가져 오려면 :

  • 파일 이름을 유지하기 위해 패키지에 변수를 만듭니다. 디자이너 표면을 클릭하려면 패키지 레벨 범위에 있는지 확인하고 변수를 열고 새 새를 클릭하고 변수 이름 ( "FilePath"), 유형 ( "String")의 이름을 지정하고 기본값을 제공합니다.
  • vb.net 코드에서 변수를 설정하십시오.

vb.net에서 :

pkg = app.LoadPackage(pkgLocation, eventListener)
' Set the file path variable in the package
' NB: You may need to prefix "User::" to the variable name depending on the execution method
pkg.Variables("filePath").Value = databasePath
pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)
  • 이제 패키지의 변수에 액세스 할 수 있어야합니다.

액세스 DB를 가져 오기 위해 사용하는 연결에 따라 몇 가지 다른 작업을 수행해야 할 수도 있습니다. OLEDB 연결을 사용하는 경우 연결 문자열 및 ServerName 속성이 있습니다. 파일 경로가있는 변수를 사용하도록 ServerName 속성을 설정합니다.@[User::filePath]) 및 Filepath 변수를 사용하려면 연결 문자열 ("Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")

체크 아웃 이 텍스트 파일 예제 표현식을 사용하여 연결 문자열을 동적으로 설정하는 방법. 이것은 접근을위한 것입니다 그러나 데이터베이스의 연결 문자열이 복잡합니다.

다른 팁

프로그램에서 SSIS 패키지를 호출하지 않으므로 그렇게 구성하는 방법을 모르겠습니다. OLEDB Connection Manager를 사용하고 "기본 Ole DB Jet 4.0 제공 업체"를 사용하면 연결 관리자의 ServerName 속성을 .mdb 파일로가는 경로로 설정할 수 있습니다.

파일을 importing.mdb로 옮겨서 이것에 접근합니다. 그런 다음 연결 관리자가 정적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top