2009-05-07 3 views
1

현재 백엔드에서 .mdb (Access) 데이터베이스 파일을 사용하는 VB.NET 데스크톱 응용 프로그램을 작성하고 있습니다. .mdb 파일은 VB.NET 응용 프로그램에서 열고 편집 할 수 있습니다. 편집이 완료되면 사용자는 SQL Server 데이터베이스로 데이터를 가져와야합니다. 동적 파일 경로 시나리오를 도입 할 때까지는 쉬운 작업입니다.SSIS 패키지 동적 .mdb 연결을 설정하는 방법 .NET 응용 프로그램에서 패키지를 실행하는 경우

SSIS에 대한 상당한 경험이 있지만이 문제에 다소 문제가 있습니다. 사용자가 자신이 선택한 .mdb 파일을 찾을 수있는 WinForm을 만들었습니다. .mdb 파일 이름에는 고유 한 타임 스탬프/날짜 정보가 들어 있습니다. (나는이 응용 프로그램을 개발하지 않았고, 최근에 이것에 대한 작업을 시작 했으므로 문제가 발생합니다 .Mdb 파일 이름을 타임 스탬프로 지정하지는 않겠지 만이 파일을 사용하면 강제로 사용할 수 있습니다!).

어쨌든 파일 이름과 경로를 내 SSIS 패키지에 동적으로 전달해야합니다. 나는 당신이 ConnectionString에 대한 변수를 생성하는 곳을 본다. 그러나 나는 세부 사항과 MS Access (Ole DB, ODBC, 또는 Jet 4.0 for Office)를 위해 사용해야하는 데이터 연결의 유형을 정말로 확신하지 못한다. !)

또한 패키지에서 .mdb 파일을 원본으로 사용하므로 내 데이터 연결의 연결 문자열이 동적이어야한다고 가정합니다. 그러나 SSIS에서 .mdb 파일에 대한 동적 데이터 연결을 만드는 방법은 무엇입니까?

그리고 내 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. 은 어떻게 SSIS 패키지에 .mdb 파일의 위치를 ​​전달합니까? 아마도 LoadPackage?
  2. 내 SSIS 패키지 용 데이터 연결에서 동적 파일 위치는 어떻게 사용합니까?

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

모든 도움을 주시면 대단히 감사하겠습니다. 감사합니다.

+0

VB 앱에서 패키지 레벨 변수를 설정하는 방법을 알았습니다. 다음과 같이됩니다. pkg.Variables ("databasePath"). 값 = databasePath – D3vtr0n

답변

3

사용하는 연결 및 실행 방법에 따라 일부는 변경되지만 패키지에 변수를 가져 오는 것은 기본적으로 동일합니다. SSIS를 사용하여 약간의 시간이 걸릴 수 있습니다. 처음 단계를 알아 내면 대부분 간단 해집니다.

패키지에 변수를 활용하려면 다음
  • 파일 이름을 유지하기 위해 패키지에 변수를 만듭니다. 디자이너 화면을 클릭하여 패키지 레벨 범위에 있는지 확인하고 변수 창을 열고 새로 만들기를 클릭 한 다음 변수 이름 ("filePath"), 유형 ("문자열")을 지정하고 기본값을 지정합니다.
  • 는 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) 
  • 이제 패키지의 변수에 액세스 할 수 있어야합니다.

Access db를 가져 오기 위해 사용하는 연결에 따라 몇 가지 작업을 수행해야 할 수 있습니다. OLEDB 연결을 사용하는 경우 연결 문자열과 ServerName 속성이 있습니다. 파일 경로 (@[User::filePath]) 또한 파일 경로 변수 ("Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")

확인 동적으로 연결 문자열을 설정하는 표현식을 사용하는 방법에 대해 알아 this text file example를 사용하도록 연결 문자열을 가진 변수를 사용하기 위해 서버 이름 속성을 설정합니다. This one is for Access이지만 데이터베이스의 연결 문자열이 복잡합니다.

+0

마지막 액세스 예제가 매우 유용합니다. 지금 솔루션을 만들고 있는데 동적으로 작동하지만 내 데이터 유형에 오류가 발생합니다. 분명히 SQL 데이터 형식은 Access 데이터 형식을 좋아하지 않으며 SSIS에서는 직접 코드를 작성합니다. 이런 일이 일어날 것임을 알았지 만 일단 데이터 유형을 분류하면 최종 해결책을 게시 할 것입니다. 모두에게 감사드립니다. 대단히 감사합니다 ... – D3vtr0n

0

나는 프로그램에서 SSIS 패키지를 호출하지 않으므로 그렇게 구성하는 방법을 모르겠습니다. OLE DB 연결 관리자를 사용하고 "네이티브 OLE DB Jet 4.0 공급자"를 사용할 때 연결 관리자의 ServerName 속성을 .MDB 파일의 경로로 설정할 수 있다는 것을 알고 있습니다.

+0

감사합니다. 그저 프로그래밍 방식으로 수행하는 방법을 알아야합니다. SSIS의 동적 .mdb 파일과 관련하여 MSDN 또는 Google에서 많은 도움을 얻을 수 없습니다. 이것이 Excel 또는 CSV라면 매우 간단하지만 SSIS의 Access에 대한이 전체 데이터 액세스 연결 개체는 매우 귀찮습니다. 도와 줘서 고마워! – D3vtr0n

0

필자는이 파일을 importing.mdb로 이동하여이 방법을 사용합니다. 그런 다음 연결 관리자는 정적입니다.

관련 문제