Visual Basic.NET - Ejecutar dts

 
Vista:

Ejecutar dts

Publicado por Richard (1 intervención) el 05/08/2009 00:12:25
Amigos, necesito si me pueden orientar con el siguente problema que tengo:

Lo que necesito es ejecutar un dts 2000 desde visual basic.net 2005, para ello utilizo dos maneras:

1)
Public Sub EjecutaDts(ByVal pServidor As String, ByVal pUsuario As String, ByVal pPassWord As String, ByVal pDtsName As String, ByVal pNumParametros As Integer, ByVal pNomParametros As String, ByVal pValParametros As String)

Dim Ciclo As Integer = 0
Dim Parte As String = ""
Dim Cadena As String = ""
Dim Casilla As Integer = 0
Dim pMaParametros() As stParametrosDts
Dim dtsp As New DTS.Package()

dtsp.LoadFromSQLServer(ServerName:=pServidor, ServerUserName:=pUsuario, ServerPassword:=pPassWord, PackageName:=pDtsName)

Try
If pNumParametros > 0 Then
ReDim pMaParametros(pNumParametros)

'Nombres Parametros...
For Ciclo = 1 To Len(pNomParametros.Trim())
Parte = Mid(pNomParametros.Trim(), Ciclo, 1)
If Parte <> "|" Then
Cadena += Parte
Else
Casilla = Casilla + 1
pMaParametros(Casilla).NombreParam = Cadena
End If
Next

'Valores Parametros...
Casilla = 0 : Cadena = ""
For Ciclo = 1 To Len(pValParametros.Trim())
Parte = Mid(pValParametros.Trim(), Ciclo, 1)
If Parte <> "|" Then
Cadena += Parte
Else
Casilla = Casilla + 1
pMaParametros(Casilla).ValorParam = Cadena
End If
Next

'For Casilla = 1 To pNumParametros
' MsgBox(dtsp.GlobalVariables.Item(Casilla).Name & " : " & dtsp.GlobalVariables.Item(Casilla).Value)
' dtsp.GlobalVariables.Item(pMaParametros(Casilla).NombreParam).Value = pMaParametros(Casilla).ValorParam
'Next

For Casilla = 1 To dtsp.GlobalVariables.Count
'MsgBox(dtsp.GlobalVariables.Item(Casilla).Name & " : " & dtsp.GlobalVariables.Item(Casilla).Value)
For Ciclo = 1 To pNumParametros
If pMaParametros(Ciclo).NombreParam.Trim.ToUpper() = dtsp.GlobalVariables.Item(Casilla).Name.Trim().ToUpper() Then
dtsp.GlobalVariables.Item(Casilla).Value = pMaParametros(Ciclo).ValorParam
Exit For
End If
Next
Next
End If

'dtsp.Properties.
dtsp.Execute()
'MsgBox(dtsp.LogFileName.ToString())
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error al ejecutar el proceso(" & pDtsName & ")")
End Try

End Sub

---- de esta manera, funciona bien, pero el problema de da cuando se utiliza un parametro en el DTS que se requiere ejecutar, osea, si hay alguna tarea de ejecucion que utilice un parametro (?) se cae el dts, pero solo si lo ejecuto desde visual, por que si lo ejecuto directamente del administrador coorporativo funciona sin problemas. -----

2)
strSQL = "EXEC master.dbo.xp_cmdshell 'DTSRun /S " + strServidor + " /E " + strUsuario + " /P " + strPassword + " /A IdReg:8=" & ldReg & " /A IdVariable:8=" & idValor & " /N dts_de_pruebas"
cmdActualizar = New SqlCommand(strSQL, dbConnection)
cmdActualizar.ExecuteNonQuery()
cmdActualizar.Dispose()

----se ejecuta sin errores, pero en la linea del "cmdActualizar.ExecuteNonQuery()" no espera a que termine de ejecutarse el dts, sino que continua de inmediato, por tanto, no puedo determinar cuando termina la ejecucion del dts. -----
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder