Pergunta

Atualmente, estou trabalhando em um aplicativo de desktop VB.NET que usos ficheiros.mdb de banco de dados (Access) no backend. Os arquivos .mdb são abertos e editados no aplicativo VB.NET. Uma vez que a edição for concluída, os usuários precisarão importar os dados para nosso banco de dados SQL Server. Esta é uma tarefa fácil, até que você tentar introduzir o cenário filepath dinâmica.

Eu tenho uma boa quantidade de experiência com SSIS mas estou tendo alguns problemas com aproximando isso. Eu criei um WinForm que permite ao usuário navegar para o arquivo .mdb de sua escolha. Os nomes de arquivos mdb tem informações timestamp / data neles, para torná-los únicos. (Eu não desenvolver esta parte do aplicativo, recentemente começou a trabalhar sobre isso, daí os problemas. Eu não timestamp um nome de arquivo .mdb mas isso é o que eu estou forçado a usar!).

De qualquer forma, eu preciso passar o nome do arquivo e caminho para o meu pacote SSIS, dinamicamente. Eu vejo onde você criar variáveis ??para ConnectionString, etc. Mas eu estou realmente sem saber dos detalhes e que tipo de conexão de dados devo usar para MS Access (Ole DB, ODBC ou Jet 4.0 para o Office ?? SHEESH há um monte! !)

Eu também assumir que seqüência de conexão da minha conexão de dados deve ser dinâmica, uma vez que o pacote vai usar o arquivo .mdb como a fonte. Mas como você criar uma conexão de dados dinâmica no SSIS para arquivos .mdb?

E como faço para passar o / string caminho nome do arquivo para o meu pacote SSIS?

Atualmente, estou prototipagem com este código:

    '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. Como faço para passar o local do arquivo .mdb para meu pacote SSIS? LoadPackage talvez?
  2. Como faço para usar o local do arquivo dinâmico na minha conexão de dados para o meu pacote SSIS?

É muito simples para fazer upload de um arquivo .mdb que não é dinâmico. Definindo a origem eo destino é bastante fácil até que você introduzir o aspecto dinâmico da seleção do usuário. Como isso é possível no SSIS?

Qualquer ajuda é muito apreciada. Obrigado.

Foi útil?

Solução

Isso vai mudar alguns, dependendo do método de conexão e execução você usa, mas é basicamente o mesmo para obter as variáveis ??no pacote. Tem sido um tempo desde que eu usei SSIS por isso pode ser um pouco fora. Mas é principalmente simples uma vez que você os passos iniciais descoberto.

Para obter variáveis ??no pacote:

  • Crie uma variável no pacote para manter o nome do arquivo. Clique na superfície de designer para garantir que está no escopo do nível de pacote, abra as janelas Variáveis, clique em Novo e especifique o nome da variável ( "filePath"), o tipo ( "String"), e dar-lhe um valor padrão.
  • Defina a variável do seu código VB.Net:

Em 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)
  • Você deve agora ter acesso à variável no pacote.

Dependendo da conexão que você está usando para importar o db Access, você pode ter que fazer algumas coisas diferentes. Se você estiver usando uma conexão OLEDB, há uma seqüência de conexão e ServerName propriedade. Defina a propriedade ServerName para usar a variável que tem o seu caminho de arquivo (@[User::filePath]) ea seqüência de conexão para também usar a variável filePath ("Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")

Confira este arquivo de texto exemplo para saber como usar expressões para definir a seqüência de conexão dinamicamente. Este é para acesso mas é complicado com seqüências de conexão a partir de um banco de dados.

Outras dicas

Eu não chamar SSIS pacotes de programas, então eu não sei como configurá-los dessa forma. Eu sei que quando eu uso um gerente de OLEDB conexão e usar o "Native OLE DB Jet Provider 4.0", que pode definir a propriedade ServerName do gerenciador de conexão com o caminho para o arquivo MDB.

Eu me aproximo isso movendo o arquivo para um importing.mdb. Em seguida, o gerenciador de conexões é estático.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top